Skip to content

bertdemiranda/gremlin-rs

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gremlin-rs

Build Status Codecov Status Crates.io Crates.io Download License Docs dependency status Codacy Badge

gremlin-client

A Rust client for Apache TinkerPop™.

Installation

Install from crates.io

[dependencies]
gremlin_client = "0.4.0"

with async-std support

[dependencies]
gremlin_client = { version = "0.4.0", features = ["async-std-runtime"] }

with tokio support

[dependencies]
gremlin_client = { version = "0.4.0", features = ["tokio-runtime"] }

Examples

Basic usage

Execute a simple Gremlin query with an id and collect the results

Synchronous

use gremlin_client::{GremlinClient, Vertex};

fn main() -> Result<(), Box<std::error::Error>> {
    let client = GremlinClient::connect("localhost")?;

    let results = client
        .execute("g.V(param)", &[("param", &1)])?
        .filter_map(Result::ok)
        .map(|f| f.take::<Vertex>())
        .collect::<Result<Vec<Vertex>, _>>()?;

    println!("{:?}", results);

    Ok(())
}

Asynchronous

With async-std

activate the feature async-std-runtime

gremlin-client = { version = "*", features = ["async-std-runtime"] }

     
use gremlin_client::{aio::GremlinClient, Vertex};
use async_std::prelude::*;

#[async_std::main]
async fn main() -> Result<(), Box<std::error::Error>> {

    let client = GremlinClient::connect("localhost").await?;
    let results = client.execute("g.V(param)", &[("param", &1)]).await?
        .filter_map(Result::ok)
        .map(|f| f.take::<Vertex>())
        .collect::<Result<Vec<Vertex>, _>>().await?;
    println!("{:?}", results);
    Ok(())
    
}

With tokio

activate the feature tokio-runtime

gremlin-client = { version = "*", features = ["tokio-runtime"] }

     
use gremlin_client::{aio::GremlinClient, Vertex};
use tokio::stream::StreamExt;

#[tokio::main]
async fn main() -> Result<(), Box<std::error::Error>> {

    let client = GremlinClient::connect("localhost").await?;
    let results = client.execute("g.V(param)", &[("param", &1)]).await?
        .filter_map(Result::ok)
        .map(|f| f.take::<Vertex>())
        .collect::<Result<Vec<Vertex>, _>>().await?;
    println!("{:?}", results);
    Ok(())
    
}

Traversal example Rust GLV

Create a remote traversal with the provided GremlinClient and build a traversal using Rust language.

Synchronous

 use gremlin_client::{GremlinClient, Vertex, process::traversal::traversal};

 fn main() -> Result<(), Box<std::error::Error>> {
    let client = GremlinClient::connect("localhost")?;

    let g = traversal().with_remote(client);

    let results = g.v(()).has_label("person").has(("name","Jon")).to_list()?;   
    
    println!("{:?}", results);
    Ok(())
}

Aynchronous

With async-std

use gremlin_client::{aio::GremlinClient, Vertex, process::traversal::traversal};
use async_std::prelude::*;

#[async_std::main]
async fn main() -> Result<(), Box<std::error::Error>> {

    
    let client = GremlinClient::connect("localhost").await?;

    let g = traversal().with_remote_async(client);

    let results = g.v(()).has_label("person").has(("name","Jon")).to_list().await?;   

    println!("{:?}", results);
    Ok(())
    
}

With tokio

use gremlin_client::{aio::GremlinClient, Vertex, process::traversal::traversal};
use tokio::stream::StreamExt;

#[tokio::main]
async fn main() -> Result<(), Box<std::error::Error>> {

    let client = GremlinClient::connect("localhost").await?;

    let g = traversal().with_remote_async(client);

    let results = g.v(()).has_label("person").has(("name","Jon")).to_list().await?;   

    println!("{:?}", results);
    Ok(())
}

Development

Compiling

git clone https://github.com/wolf4ood/gremlin-rs.git
cd gremlin-rs
cargo build

Running Tests

Some tests run against a running instance of Gremlin Server with a sample in-memory graph installed.

You can use docker-compose to start an instance for testing. Use the env variable GREMLIN_SERVER in order to specify the version of the Gremlin Server

cd docker-compose
export GREMLIN_SERVER=3.4.0
docker-compose up -d
cd ..
cargo test --all-features

About

Gremlin Rust

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 99.5%
  • Other 0.5%