redisgraphio

Crates.ioredisgraphio
lib.rsredisgraphio
version0.2.0
sourcesrc
created_at2022-06-25 23:02:09.109999
updated_at2022-07-20 14:34:38.638896
descriptionClient library for working with redis graph
homepagehttps://github.com/redis-rs/redis-rs
repositoryhttps://github.com/Threated/redisgraphio
max_upload_size
id613320
size48,612
Jan (Threated)

documentation

https://docs.rs/redisgraphio

README

redisgraphio

crates.io

This is a rust client library for working with the RedisGraph module for Redis.
It works in conjunction with redis-rs by implementing a trait for the redis connection.

Features

Synchronous usage

[dependencies]
redis = "0.21" # or higher
redisgraphio = "0.1"
use redis::RedisResult;
use redisgraphio::*;

fn rider_example() -> RedisResult<()> {
    let client = redis::Client::open("redis://127.0.0.1/")?;
    let mut con = client.get_connection()?;
    con.graph_query_void("my_graph", query!(
        "CREATE (:Rider {name:'Valentino Rossi'})-[:rides]->(:Team {name:'Yamaha'})"
    ))?;
    // Assuming this could be malicious user input you need to escape
    let team_name = "Yamaha";
    let riders: Vec<(Node,)> = con.graph_query(
        "my_graph", // graph to query
        query!(
            "MATCH (rider:Rider)-[:rides]->(:Team {name: $team}) RETURN rider",
            {
                "team" => team_name
            },
            true // Optinal parameter to enable read only access, default is false
    )
    )?.data;
    for (rider,) in riders {
        let name: String = rider.get_property_by_index(0)?;
        println!("{name}")
    }
    Ok(())
}

Asynchronous usage

To enable the redisgraphio async commands either enable the tokio-comp or async-std-comp

[dependencies]
redis = "0.21.0"
redis-graph = { version = "0.1", features = ['tokio-comp'] }
use redis::RedisResult;
use redisgraphio::*;

async fn rider_example() -> RedisResult<()> {
    let client = redis::Client::open("redis://127.0.0.1/")?;
    let mut con = client.get_async_connection().await?;
    con.graph_query_void("my_graph", query!(
        "CREATE (:Rider {name:'Valentino Rossi'})-[:rides]->(:Team {name:'Yamaha'})"
    )).await?;
    // Assuming this could be malicious user input you need to escape
    let team_name = "Yamaha";
    let riders: Vec<(Node,)> = con.graph_query(
        "my_graph",
        query!(
            "MATCH (rider:Rider)-[:rides]->(:Team {name: $team}) RETURN rider",
            {
                "team" => team_name
            },
            true // Optinal parameter to enable read only access, default is false
    )
    ).await?.data;
    for (rider,) in riders {
        let name: String = rider.get_property_by_index(0)?;
        println!("{name}")
    }
    Ok(())
}

Credit

The crates API was inspired by the redis-graph crate which also implents traits on the redis connection.
The serialisation was inspired by redis-rs itself.

Commit count: 26

cargo fmt