6 releases (stable)
2.0.2 | Sep 11, 2023 |
---|---|
2.0.1 | Feb 26, 2023 |
2.0.0 | Jul 3, 2022 |
1.0.0 | Oct 10, 2021 |
0.1.1 | Aug 25, 2020 |
#1817 in Database interfaces
39 downloads per month
480KB
12K
SLoC
rsmgclient - Rust Memgraph Client
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.
Installation
Prerequisites
- 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
Installing from crates.io
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
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.
Building from Source
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
cargo build
# Please run Memgraph based on the quick start guide
cargo test
On MacOS, the build will try to detect OpenSSL by using MacPorts or Homebrew.
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.
Documentation
Online documentation can be found on docs.rs pages.
Code Sample
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)
}
}
Dependencies
~1–3.5MB
~61K SLoC