use graph_d::{Graph, Result};
use serde_json::json;
use std::collections::HashMap;
fn main() -> Result<()> {
println!("Graph Database v{}", graph_d::VERSION);
let mut graph = Graph::new()?;
let alice_id = graph.create_node(
[
("name".to_string(), json!("Alice")),
("age".to_string(), json!(30)),
("city".to_string(), json!("New York")),
]
.into(),
)?;
let bob_id = graph.create_node(
[
("name".to_string(), json!("Bob")),
("age".to_string(), json!(25)),
("city".to_string(), json!("San Francisco")),
]
.into(),
)?;
let charlie_id = graph.create_node(
[
("name".to_string(), json!("Charlie")),
("age".to_string(), json!(35)),
("city".to_string(), json!("Seattle")),
]
.into(),
)?;
println!(
"Created nodes: Alice ({}), Bob ({}), Charlie ({})",
alice_id, bob_id, charlie_id
);
let rel1_id = graph.create_relationship(
alice_id,
bob_id,
"KNOWS".to_string(),
[("since".to_string(), json!("2020"))].into(),
)?;
let rel2_id = graph.create_relationship(
bob_id,
charlie_id,
"WORKS_WITH".to_string(),
[("project".to_string(), json!("GraphDB"))].into(),
)?;
println!(
"Created relationships: {} (Alice knows Bob), {} (Bob works with Charlie)",
rel1_id, rel2_id
);
if let Some(alice) = graph.get_node(alice_id)? {
println!("Alice's data: {:?}", alice.properties);
let relationships = graph.get_relationships_for_node(alice_id)?;
println!("Alice has {} relationships", relationships.len());
for rel in relationships {
println!(
" -> {} relationship {} to node {}",
rel.rel_type, rel.id, rel.to_id
);
}
}
println!("Graph database demo completed successfully!");
Ok(())
}