This commit is contained in:
Olivier 'reivilibre' 2022-11-19 15:28:36 +00:00
parent 58c5c3f039
commit cf502b7f7e
2 changed files with 8 additions and 20 deletions

View File

@ -140,7 +140,7 @@ fn wrapped_main() -> anyhow::Result<i32> {
let mut node_to_extract = &mut root_tree_node.node; let mut node_to_extract = &mut root_tree_node.node;
if let Some(subset) = subset { if let Some(subset) = subset {
for path_to_descend in subset.split('/').filter(|s| ! s.is_empty()) { for path_to_descend in subset.split('/').filter(|s| !s.is_empty()) {
match node_to_extract.child(path_to_descend) { match node_to_extract.child(path_to_descend) {
Ok(new_node) => { Ok(new_node) => {
node_to_extract = new_node; node_to_extract = new_node;

View File

@ -274,25 +274,13 @@ impl TreeNode {
/// Recurses into a child by name, or returns Err with a reason. /// Recurses into a child by name, or returns Err with a reason.
pub fn child(&mut self, name: &str) -> Result<&mut TreeNode, &'static str> { pub fn child(&mut self, name: &str) -> Result<&mut TreeNode, &'static str> {
match self { match self {
TreeNode::NormalFile { .. } => { TreeNode::NormalFile { .. } => Err("not a directory: normal file"),
Err("not a directory: normal file") TreeNode::Directory { children, .. } => match children.get_mut(name) {
} None => Err("child not in directory"),
TreeNode::Directory { children, .. } => { Some(node) => Ok(node),
match children.get_mut(name) { },
None => { TreeNode::SymbolicLink { .. } => Err("not a directory: symlink"),
Err("child not in directory") TreeNode::Deleted => Err("not a directory: deleted"),
}
Some(node) => {
Ok(node)
}
}
}
TreeNode::SymbolicLink { .. } => {
Err("not a directory: symlink")
}
TreeNode::Deleted => {
Err("not a directory: deleted")
}
} }
} }
} }