diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-02-23 10:59:24 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-02-23 10:59:24 +0100 |
commit | 452c26cc37ea2b59660b98252f83353bb5c9d0be (patch) | |
tree | b1b968fa60f436cc80c3f0135984564bd0fd7e01 | |
parent | 731902c6c5827ab1acbcbb077555cf818cd6c5f5 (diff) |
Let parent be optional
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | lib/etc/libimagutil/src/tree.rs | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/lib/etc/libimagutil/src/tree.rs b/lib/etc/libimagutil/src/tree.rs index 42bdd7cf..e8cc9136 100644 --- a/lib/etc/libimagutil/src/tree.rs +++ b/lib/etc/libimagutil/src/tree.rs @@ -94,7 +94,7 @@ pub trait IdGetter<T> type ID: PartialEq + Sized; fn get_id_for_node(&self, node: &T) -> Result<Self::ID>; - fn get_id_for_parent_of(&self, node: &T) -> Result<Self::ID>; + fn get_id_for_parent_of(&self, node: &T) -> Result<Option<Self::ID>>; } pub struct TreeBuilder<'a, T, ID, IG>(&'a mut Tree<T>, IG) @@ -110,15 +110,15 @@ impl<'a, T, ID, IG> TreeBuilder<'a, T, ID, IG> pub fn build(&mut self) -> Result<()> { let mut i = 0; while let Some(node) = self.0.elements.get(i) { - let parent_id = self.1.get_id_for_parent_of(&node.element)?; - - if let Some(parent_idx) = self.find_node_idx(&parent_id)? { - if let Some(parent) = self.0.elements.get_mut(parent_idx) { - parent.childs_indexes.push(i); - } - - if let Some(child) = self.0.elements.get_mut(i) { - child.parent_idx = Some(parent_idx); + if let Some(parent_id) = self.1.get_id_for_parent_of(&node.element)? { + if let Some(parent_idx) = self.find_node_idx(&parent_id)? { + if let Some(parent) = self.0.elements.get_mut(parent_idx) { + parent.childs_indexes.push(i); + } + + if let Some(child) = self.0.elements.get_mut(i) { + child.parent_idx = Some(parent_idx); + } } } |