use rocksgraph::{Graph, TraversalBuilder, __};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let temp_dir = tempfile::tempdir()?;
let graph = Graph::open(temp_dir.path())?;
let mut tx = graph.begin();
tx.g().addV("person").property("id", 1i64).property("name", "alice").property("age", 30i32).next()?;
tx.g().addV("person").property("id", 2i64).property("name", "bob").property("age", 25i32).next()?;
tx.g().addE("knows").from(1).to(2).property("weight", 0.5f64).next()?;
tx.commit()?;
let mut snap = graph.read();
println!("=== g.V([1]).out(\"knows\").count() ===");
let plan = snap.g().V([1]).out(["knows"]).count().explain()?;
println!("{}", plan);
println!("=== g.V([]).hasId([1]).values(\"name\") ===");
let plan = snap.g().V([]).hasId([1]).values(["name"]).explain()?;
println!("{}", plan);
println!("=== g.V([1]).outE(\"knows\").where(otherV().hasId([2])) ===");
let plan = snap.g().V([1]).outE(["knows"]).r#where(__().otherV().hasId([2])).explain()?;
println!("{}", plan);
println!("=== g.V([1]).union(outE(\"knows\"), inE(\"knows\")) ===");
let plan = snap.g().V([1]).union([__().outE(["knows"]), __().inE(["knows"])]).explain()?;
println!("{}", plan);
println!("=== g.V([1]).out(\"knows\").both(\"knows\").hasLabel(\"person\").count() ===");
let plan = snap.g().V([1]).out(["knows"]).both(["knows"]).hasLabel(["person"]).count().explain()?;
println!("{}", plan);
println!("=== g.V([1]).repeat(out(\"knows\")).times(3) ===");
let plan = snap.g().V([1]).repeat(__().out(["knows"])).times(3).explain()?;
println!("{}", plan);
println!("=== g.V([1]).repeat(out(\"knows\")).until(hasId([2])) ===");
let plan = snap.g().V([1]).repeat(__().out(["knows"])).until(__().hasId([2])).explain()?;
println!("{}", plan);
Ok(())
}