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 rsmgclientWindows Users: If you encounter OpenSSL-related build issues, you can install OpenSSL via vcpkg:
vcpkg install openssl:x64-windows-staticThen 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=1To 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
mgclientrequirements. - 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 testOn 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_DIRandOPENSSL_INCLUDE_DIRenvironment 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)
}
}