Rust crate for accessing the cypher endpoint of a neo4j server
This crate allows you to send cypher queries to the REST endpoint of a neo4j database. You can execute queries inside a transaction or simply send queries that commit immediately.
rust
use rusted_cypher::GraphClient;
let graph = GraphClient::connect(
"http://neo4j:neo4j@localhost:7474/db/data");
```rust let mut query = graph.query();
// Statement implements From<&str> query.add_statement( "CREATE (n:LANG { name: 'Rust', level: 'low', safe: true })");
let statement = Statement::new( "CREATE (n:LANG { name: 'C++', level: 'low', safe: {safeness} })") .with_param("safeness", false)?;
query.add_statement(statement);
query.send()?;
graph.exec( "CREATE (n:LANG { name: 'Python', level: 'high', safe: true })")?;
let result = graph.exec( "MATCH (n:LANG) RETURN n.name, n.level, n.safe")?;
assert_eq!(result.data.len(), 3);
for row in result.rows() { let name: String = row.get("n.name")?; let level: String = row.get("n.level")?; let safeness: bool = row.get("n.safe")?; println!("name: {}, level: {}, safe: {}", name, level, safeness); }
graph.exec("MATCH (n:LANG) DELETE n")?; ```
```rust let transaction = graph .transaction() .withstatement( "CREATE (n:INTRANSACTION { name: 'Rust', level: 'low', safe: true })");
let (mut transaction, results) = transaction.begin().unwrap();
// Use exec
to execute a single statement
transaction.exec("CREATE (n:IN_TRANSACTION { name: 'Python', level: 'high', safe: true })")?;
// use add_statement
(or with_statement
) and send
to executes multiple statements
let stmt = Statement::new(
"MATCH (n:INTRANSACTION) WHERE (n.safe = {safeness}) RETURN n")
.withparam("safeness", true)?;
transaction.add_statement(stmt); let results = transaction.send()?;
assert_eq!(results[0].data.len(), 2);
transaction.rollback()?; } ```
There is a macro to help building statements
```rust let statement = cypherstmt!( "CREATE (n:WITHMACRO { name: {name}, level: {level}, safe: {safe} })", { "name" => "Rust", "level" => "low", "safe" => true } )?; graph.exec(statement)?;
let statement = cypherstmt!( "MATCH (n:WITHMACRO) WHERE n.name = {name} RETURN n", { "name" => "Rust" } )?;
let results = graph.exec(statement)?; assert_eq!(results.data.len(), 1);
let statement = cypherstmt!("MATCH (n:WITHMACRO) DELETE n")?; graph.exec(statement)?; ```
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.