pub trait NodeStore {
// Required methods
fn name_by_id(&self, nid: NodeId) -> Option<&str>;
fn id_by_name<T>(&self, s: T) -> Option<NodeId>
where T: AsRef<str>;
fn node_opt(&self, nid: NodeId) -> Option<&NodeData>;
fn visit_nodes<F>(&self, f: F)
where F: FnMut(&NodeData);
// Provided method
fn node(&self, nid: NodeId) -> &NodeData { ... }
}