1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#![doc(html_logo_url = "https://oss.redislabs.com/redisgraph/images/logo_small.png")]

//! # redisgraph-rs
//! 
//! `redisgraph-rs` is an idiomatic Rust client for RedisGraph, the graph database by Redis.
//! 
//! This crate parses responses from RedisGraph and converts them into ordinary Rust values.
//! It exposes a very flexible API that allows you to retrieve a single value, a single record
//! or multiple records using only one function: [`Graph::query`](graph/struct.Graph.html#method.query).
//! 
//! If you want to use this crate, add this to your Cargo.toml:
//! 
//! ```ini
//! [dependencies]
//! redis = "0.15.1"
//! redisgraph = "0.1.0"
//! ```
//! 
//! **Warning**: This library has not been thoroughly tested yet and some features are still missing.
//! Expect bugs and breaking changes.
//! 
//! ## Resources
//! 
//! - RedisGraph documentation: [redisgraph.io][]
//! - API Reference: [docs.rs/redisgraph]
//! 
//! ## Example
//! 
//! First, run RedisGraph on your machine using
//! 
//! ```sh
//! $ docker run --name redisgraph-test -d --rm -p 6379:6379 redislabs/redisgraph
//! ```
//! 
//! Then, try out this code:
//! 
//! ```rust
//! use redis::Client;
//! use redisgraph::{Graph, RedisGraphResult};
//! 
//! fn main() -> RedisGraphResult<()> {
//!     let client = Client::open("redis://127.0.0.1")?;
//!     let mut connection = client.get_connection()?;
//! 
//!     let mut graph = Graph::open(connection, "MotoGP".to_string())?;
//! 
//!     // Create six nodes (three riders, three teams) and three relationships between them.
//!     graph.mutate("CREATE (:Rider {name: 'Valentino Rossi', birth_year: 1979})-[:rides]->(:Team {name: 'Yamaha'}), \
//!         (:Rider {name:'Dani Pedrosa', birth_year: 1985, height: 1.58})-[:rides]->(:Team {name: 'Honda'}), \
//!         (:Rider {name:'Andrea Dovizioso', birth_year: 1986, height: 1.67})-[:rides]->(:Team {name: 'Ducati'})")?;
//! 
//!     // Get the names and birth years of all riders in team Yamaha.
//!     let results: Vec<(String, u32)> = graph.query("MATCH (r:Rider)-[:rides]->(t:Team) WHERE t.name = 'Yamaha' RETURN r.name, r.birth_year")?;
//!     // Since we know just one rider in our graph rides for team Yamaha,
//!     // we can also write this and only get the first record:
//!     let (name, birth_year): (String, u32) = graph.query("MATCH (r:Rider)-[:rides]->(t:Team) WHERE t.name = 'Yamaha' RETURN r.name, r.birth_year")?;
//!     // Let's now get all the data about the riders we have.
//!     // Be aware of that we only know the height of some riders, and therefore we use an `Option`:
//!     let results: Vec<(String, u32, Option<f32>)> = graph.query("MATCH (r:Rider) RETURN r.name, r.birth_year, r.height")?;
//! 
//!     // That was just a demo; we don't need this graph anymore. Let's delete it from the database:
//!     graph.delete()?;
//! 
//!     Ok(())
//! }
//! ```
//! 
//! [redisgraph.io]:https://redisgraph.io
//! [docs.rs/redisgraph]:https://docs.rs/redisgraph

#[macro_use]
pub mod error;

pub mod assignments;
pub mod graph;
pub mod result_set;

mod conversions;

pub use error::{RedisGraphError, RedisGraphResult};
pub use graph::Graph;
pub use result_set::{RedisString, ResultSet};