wolf_graph/traits/
mutable_forest.rs

1use anyhow::Result;
2
3use crate::{EdgeID, NodeID, Nodes, VisitableForest};
4
5pub trait MutableForest: VisitableForest {
6    fn add_node_with_node_and_edge_data(&mut self, node: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>, node_data: Self::NData, edge_data: Self::EData) -> Result<()>;
7
8    fn adding_node_with_node_and_edge_data(&self, node: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>, node_data: Self::NData, edge_data: Self::EData) -> Result<Self>
9    where
10        Self: Clone + Sized,
11    {
12        let mut tree = self.clone();
13        tree.add_node_with_node_and_edge_data(node, parent, edge, node_data, edge_data)?;
14        Ok(tree)
15    }
16
17    fn remove_node_ungrouping(&mut self, id: impl AsRef<NodeID>) -> Result<()>;
18
19    fn removing_node_ungrouping(&self, id: impl AsRef<NodeID>) -> Result<Self>
20    where
21        Self: Clone + Sized,
22    {
23        let mut tree = self.clone();
24        tree.remove_node_ungrouping(id)?;
25        Ok(tree)
26    }
27
28    fn remove_node_and_children(&mut self, id: impl AsRef<NodeID>) -> Result<Nodes>;
29
30    fn removing_node_and_children(&self, id: impl AsRef<NodeID>) -> Result<Self>
31    where
32        Self: Clone + Sized,
33    {
34        let mut tree = self.clone();
35        tree.remove_node_and_children(id)?;
36        Ok(tree)
37    }
38
39    fn remove_children(&mut self, id: impl AsRef<NodeID>) -> Result<Nodes>;
40
41    fn removing_children(&self, id: impl AsRef<NodeID>) -> Result<Self>
42    where
43        Self: Clone + Sized,
44    {
45        let mut tree = self.clone();
46        tree.remove_children(id)?;
47        Ok(tree)
48    }
49
50    fn move_node(&mut self, id: impl AsRef<NodeID>, new_parent: Option<impl AsRef<NodeID>>) -> Result<()>;
51
52    fn moving_node(&self, id: impl AsRef<NodeID>, new_parent: Option<impl AsRef<NodeID>>) -> Result<Self>
53    where
54        Self: Clone + Sized,
55    {
56        let mut tree = self.clone();
57        tree.move_node(id, new_parent)?;
58        Ok(tree)
59    }
60
61    fn set_data(&mut self, data: Self::GData);
62
63    fn setting_data(&self, data: Self::GData) -> Self
64    where
65        Self: Clone + Sized,
66    {
67        let mut tree = self.clone();
68        tree.set_data(data);
69        tree
70    }
71
72    fn set_node_data(&mut self, id: impl AsRef<NodeID>, data: Self::NData) -> Result<()>;
73
74    fn setting_node_data(&self, id: impl AsRef<NodeID>, data: Self::NData) -> Result<Self>
75    where
76        Self: Clone + Sized,
77    {
78        let mut tree = self.clone();
79        tree.set_node_data(id, data)?;
80        Ok(tree)
81    }
82
83    fn set_edge_data(&mut self, id: impl AsRef<EdgeID>, data: Self::EData) -> Result<()>;
84
85    fn setting_edge_data(&self, id: impl AsRef<EdgeID>, data: Self::EData) -> Result<Self>
86    where
87        Self: Clone + Sized,
88    {
89        let mut tree = self.clone();
90        tree.set_edge_data(id, data)?;
91        Ok(tree)
92    }
93
94    fn add_node(&mut self, id: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>) -> Result<()>
95    where
96        Self::NData: Default,
97        Self::EData: Default,
98    {
99        self.add_node_with_node_and_edge_data(id, parent, edge, Self::NData::default(), Self::EData::default())
100    }
101
102    fn adding_node(&self, id: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>) -> Result<Self>
103    where
104        Self: Clone + Sized,
105        Self::NData: Default,
106        Self::EData: Default,
107    {
108        self.adding_node_with_node_and_edge_data(id, parent, edge, Self::NData::default(), Self::EData::default())
109    }
110
111    fn add_node_with_edge_data(&mut self, id: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>, edge_data: Self::EData) -> Result<()>
112    where
113        Self::NData: Default,
114    {
115        self.add_node_with_node_and_edge_data(id, parent, edge, Self::NData::default(), edge_data)
116    }
117
118    fn adding_node_with_edge_data(&self, id: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>, edge_data: Self::EData) -> Result<Self>
119    where
120        Self: Clone + Sized,
121        Self::NData: Default,
122    {
123        self.adding_node_with_node_and_edge_data(id, parent, edge, Self::NData::default(), edge_data)
124    }
125
126    fn add_node_with_node_data(&mut self, id: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>, node_data: Self::NData) -> Result<()>
127    where
128        Self::EData: Default,
129    {
130        self.add_node_with_node_and_edge_data(id, parent, edge, node_data, Self::EData::default())
131    }
132
133    fn adding_node_with_node_data(&self, id: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>, node_data: Self::NData) -> Result<Self>
134    where
135        Self: Clone + Sized,
136        Self::EData: Default,
137    {
138        self.adding_node_with_node_and_edge_data(id, parent, edge, node_data, Self::EData::default())
139    }
140
141    fn with_data(&mut self, transform: &dyn Fn(&mut Self::GData));
142
143    fn with_node_data(&mut self, id: impl AsRef<NodeID>, transform: &dyn Fn(&mut Self::NData)) -> Result<()>;
144
145    fn with_edge_data(&mut self, id: impl AsRef<EdgeID>, transform: &dyn Fn(&mut Self::EData)) -> Result<()>;
146}