An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          

# rsmgclient - Rust Memgraph Client

[![](https://github.com/memgraph/rsmgclient/workflows/CI/badge.svg)](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)
}
}
```