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.
- Async support
- Serialisation into custom types
- Query parameter escaping (See below)
[dependencies] redis = "0.21" # or higher redisgraphio = "0.2"
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(()) }
To enable the redisgraphio async commands either enable the tokio-comp or async-std-comp
[dependencies] redis = "0.21.0" redis-graph = { version = "0.2", 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(()) }
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.