rsmgclient
is Memgraph database adapter for Rust
programming language. rsmgclient
crate is the current implementation of the
adapter. It is implemented as a wrapper around
mgclient, the official Memgraph C/C++
client library.
Once prerequisites are met, if you want to use rsmgclient
as library for your
own Rust project, you can install it by using cargo
:
bash
cargo install rsmgclient
NOTE: The default OpenSSL path on Windows is C:\Program Files\OpenSSL-Win64\lib
,
if you would like to change that please provide OPENSSL_LIB_DIR
env variable.
To contribute into rsmgclient
or just looking closely how it is made,
you will need:
mgclient
requirementsOnce rsmgclient
is cloned, you will need to build it and then you can run
the test suite to verify it is working correctly:
```bash
git submodule update --init
cargo build
cargo test ```
On MacOS, the build will try to detect OpenSSL by using MacPorts or Brew.
On Windows, bindgen
requires libclang
which is a part of LLVM. If LLVM is
not already installed just go to the LLVM
download page, download and install
LLVM.exe
file (select the option to put LLVM on the PATH). In addition,
default OpenSSL path is C:\Program Files\OpenSSL-Win64\lib
, if you would like
to change that please provide OPENSSL_LIB_DIR
env variable during the build
phase.
Online documentation can be found on docs.rs pages.
src/main.rs
is an example showing some of the basic commands:
```rust use rsmgclient::{ConnectParams, Connection, MgError, Value};
fn executequery() -> Result<(), MgError> { // Connect to Memgraph. let connectparams = ConnectParams { host: Some(String::from("localhost")), ..Default::default() }; let mut connection = Connection::connect(&connect_params)?;
// Create simple graph.
connection.execute_without_results(
"CREATE (p1:Person {name: 'Alice'})-[l1:Likes]->(m:Software {name: 'Memgraph'}) \
CREATE (p2:Person {name: 'John'})-[l2:Likes]->(m);",
)?;
// Fetch the graph.
let columns = connection.execute("MATCH (n)-[r]->(m) RETURN n, r, m;", None)?;
println!("Columns: {}", columns.join(", "));
for record in connection.fetchall()? {
for value in record.values {
match value {
Value::Node(node) => print!("{}", node),
Value::Relationship(edge) => print!("-{}-", edge),
value => print!("{}", value),
}
}
println!();
}
connection.commit()?;
Ok(())
}
fn main() { if let Err(error) = execute_query() { panic!("{}", error) } } ```