https://github.com/memgraph/rsmgclient
Memgraph database adapter for Rust programming language.
https://github.com/memgraph/rsmgclient
bolt client database-connector memgraph rust
Last synced: 2 months ago
JSON representation
Memgraph database adapter for Rust programming language.
- Host: GitHub
- URL: https://github.com/memgraph/rsmgclient
- Owner: memgraph
- License: apache-2.0
- Created: 2020-07-13T08:30:49.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2025-11-20T14:26:52.000Z (5 months ago)
- Last Synced: 2025-12-27T08:44:28.341Z (4 months ago)
- Topics: bolt, client, database-connector, memgraph, rust
- Language: Rust
- Homepage: https://crates.io/crates/rsmgclient
- Size: 118 KB
- Stars: 42
- Watchers: 5
- Forks: 11
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# rsmgclient - Rust Memgraph Client
[](https://github.com/memgraph/rsmgclient/actions)
`rsmgclient` is a [Memgraph](https://memgraph.com/) database adapter for Rust
programming language. The `rsmgclient` crate is the current implementation of
the adapter. It is implemented as a wrapper around
[mgclient](https://github.com/memgraph/mgclient), the official Memgraph C/C++
client library.
## Installation
### Prerequisites
- [Rust](https://doc.rust-lang.org/cargo/getting-started/installation.html)
1.42.0 or above
- Prerequisites of [mgclient](https://github.com/memgraph/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`:
```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.
### Building from Source
To contribute into `rsmgclient` or just to look more closely how it is made,
you will need:
- Cloned [rsmgclient](https://github.com/memgraph/rsmgclient) repository
- Properly initialized [mgclient](https://github.com/memgraph/mgclient), please
take care of the `mgclient` requirements.
- [Memgraph Quick Start Guide](https://memgraph.com/docs/memgraph/quick-start)
Once `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 --recursive
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](https://releases.llvm.org/download.html) 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](https://docs.rs/rsmgclient/).
## Code Sample
`src/main.rs` is an example showing some of the basic commands:
```rust
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)
}
}
```