rsmgclient
is a Memgraph database adapter for Rust
programming language. The rsmgclient
crate is the current implementation of
the adapter. It is implemented as a wrapper around
mgclient, the official Memgraph C/C++
client library.
- Rust 1.42.0 or above
- Prerequisites of mgclient:
- A C compiler supporting C11 standard
- CMake 3.8 or newer
- OpenSSL 1.0.2 or newer
Once prerequisites are met, if you want to use rsmgclient
as a library for
your own Rust project, you can install it using cargo
:
cargo install rsmgclient
Windows Users: If you encounter OpenSSL-related build issues, you can install OpenSSL via vcpkg:
vcpkg install openssl:x64-windows-static
Then set the environment variables:
set OPENSSL_LIB_DIR=C:\vcpkg\installed\x64-windows-static\lib
set OPENSSL_INCLUDE_DIR=C:\vcpkg\installed\x64-windows-static\include
set OPENSSL_STATIC=1
To contribute into rsmgclient
or just to look more closely how it is made,
you will need:
- Cloned rsmgclient repository
- Properly initialized mgclient, please
take care of the
mgclient
requirements. - Memgraph Quick Start Guide
Once rsmgclient
is cloned, you will need to build it and then you can run
the test suite to verify it is working correctly:
git submodule update --init --recursive
cargo build
# Please run Memgraph based on the quick start guide
cargo test
On MacOS, the build will automatically detect OpenSSL using MacPorts or Homebrew.
On Windows, the build supports multiple OpenSSL configurations:
- Recommended: The build will automatically use vcpkg to install OpenSSL if available
- Manual: You can provide custom OpenSSL paths using
OPENSSL_LIB_DIR
andOPENSSL_INCLUDE_DIR
environment variables - Default: Falls back to
C:\Program Files\OpenSSL-Win64\
if no custom paths are provided
bindgen
requires libclang
which is part of LLVM. On Windows, if LLVM is not installed, download it from the LLVM download page and install the LLVM.exe
file (make sure to select the option to add LLVM to PATH).
Online documentation can be found on docs.rs pages.
src/main.rs
is an example showing some of the basic commands:
use rsmgclient::{ConnectParams, Connection, MgError, Value};
fn execute_query() -> Result<(), MgError> {
// Connect to Memgraph.
let connect_params = 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)
}
}