use graph_api_lib::Graph;
use graph_api_lib::{VertexReference, VertexSearch};
use graph_api_simplegraph::SimpleGraph;
use graph_api_test::{Vertex, populate_graph};
fn main() {
let mut graph = SimpleGraph::new();
let _refs = populate_graph(&mut graph);
example(graph);
}
fn example<G>(graph: G)
where
G: Graph<Vertex = Vertex>,
{
let vertex_ids = graph
.walk()
.vertices(VertexSearch::scan())
.into_iter()
.collect::<Vec<_>>();
assert!(vertex_ids.len() >= 4);
let filtered_vertices = graph
.walk()
.vertices(VertexSearch::scan())
.into_iter()
.filter(|vertex_id| {
if let Some(vertex) = graph.vertex(*vertex_id) {
matches!(vertex.weight(), Vertex::Person { .. })
} else {
false
}
})
.collect::<Vec<_>>();
assert_eq!(filtered_vertices.len(), 2);
let vertex_names = graph
.walk()
.vertices(VertexSearch::scan())
.map(|vertex, _ctx| {
match vertex.weight() {
Vertex::Person { name, .. } => name.clone(),
Vertex::Project(project) => project.name.clone(),
_ => "Unknown".to_string(),
}
})
.collect::<Vec<_>>();
assert!(vertex_names.contains(&"Bryn".to_string()));
assert!(vertex_names.contains(&"Julia".to_string()));
assert!(vertex_names.contains(&"GraphApi".to_string()));
assert!(vertex_names.contains(&"Rust".to_string()));
}