wolf_graph/traits/
visitable_forest.rs

1use anyhow::Result;
2
3use crate::{EdgeID, NodeID, Nodes, VisitableGraph};
4
5pub trait VisitableForest: VisitableGraph {
6    fn in_edge(&self, node: impl AsRef<NodeID>) -> Result<Option<EdgeID>>;
7    fn in_edge_with_root(&self, node: impl AsRef<NodeID>) -> Result<Option<EdgeID>>;
8    fn parent(&self, node: impl AsRef<NodeID>) -> Result<Option<NodeID>>;
9    fn children(&self, node: Option<impl AsRef<NodeID>>) -> Result<Nodes>;
10    fn has_children(&self, node: impl AsRef<NodeID>) -> Result<bool>;
11    fn child_count(&self, node: impl AsRef<NodeID>) -> Result<usize>;
12
13    fn descendants(&self, nodes: &Nodes) -> Result<Nodes> {
14        self.transitive_successors(nodes)
15    }
16
17    fn ancestors(&self, nodes: &Nodes) -> Result<Nodes> {
18        self.transitive_predecessors(nodes)
19    }
20}