Skip to content

memgraph/rsmgclient

Repository files navigation

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

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

Building from Source

To contribute into rsmgclient or just to look more closely how it is made, you will need:

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 and OPENSSL_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).

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)
    }
}

About

Memgraph database adapter for Rust programming language.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 12

Languages