use dot_parser::*;
use dot_parser::ast::ID;
fn extract_label<'a>(pair: (ID<'a>, ID<'a>)) -> Option<ID<'a>> {
let label: String = pair.0.into();
if "label" == &label {
Some(pair.1)
} else {
None
}
}
fn main() {
let graph = ast::Graph::try_from(
"graph {
A[label=\"label 1 node A\", label=\"label 2 node A\"];
B;
C[label=\"label node C\", color=\"grey\"];
A -> B -> C [label=\"label edges\"];
}",
)
.unwrap();
let graph = graph.filter_map(&extract_label);
let graph = canonical::Graph::from(graph);
for node in graph.nodes.set.values() {
println!("{} -- {}", node.id, node.attr)
}
for edge in graph.edges.set {
println!("{} -> {} -- {}", edge.from, edge.to, edge.attr)
}
}