Skip to content

Commit

Permalink
tweak: avoid invalid deconstructions
Browse files Browse the repository at this point in the history
  • Loading branch information
sstelfox committed May 30, 2024
1 parent 53b41f7 commit cb2a537
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 28 deletions.
41 changes: 20 additions & 21 deletions src/filesystem/drive/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -285,31 +285,30 @@ impl Drive {
pub async fn full_path_from_root(
&self,
target: &PermanentId,
) -> Result<Vec::<String>, OperationError> {
) -> Result<Vec<String>, OperationError> {
let inner_read = &self.inner.read().await;
let root = inner_read.root_node().map_err(|_| OperationError::Other("no root node"))?;
let mut next = target.clone();
if next == root.permanent_id() {
return Ok(vec![]);
}
let target_node = inner_read.by_perm_id(target).map_err(|_| OperationError::MissingPermanentId(*target))?;
let mut path = vec![target_node.name().into_inner()];
loop {
let current_node = inner_read.by_perm_id(&next)?;
let parent_id = current_node.parent_id().ok_or(OperationError::InternalCorruption(current_node.id(), "no parent"))?;
let target_node = inner_read
.by_perm_id(target)
.map_err(|_| OperationError::MissingPermanentId(*target))?;

let target_node_name = match target_node.name() {
NodeName::Root => return Ok(Vec::new()),
NoneName::Named(name) => name.to_string(),
};

let mut path = vec![target_node_name()];
while let Some(parent_id) = target_node.parent_id() {
let parent_node = inner_read.by_perm_id(&parent_id)?;
let parent_name = parent_node.name();
match parent_name {
NodeName::Root => {
path.reverse();
return Ok(path);
},
NodeName::Named(name) => path.push(name.clone()),
}
next = parent_id;

let parent_name = match parent_node.name() {
NodeName::Root => break,
NodeName::Named(name) => path.push(name.to_string()),
};
}
}
path.reverse();

Ok(path)
}
}

#[derive(Debug, thiserror::Error)]
Expand Down
7 changes: 0 additions & 7 deletions src/filesystem/nodes/node_name.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,13 +117,6 @@ impl NodeName {
Self::Named(name) => 2 + name.len(),
}
}

pub(crate) fn into_inner(self) -> String {
match self {
Self::Root => String::from(""),
Self::Named(name) => name,
}
}
}

impl std::convert::TryFrom<&str> for NodeName {
Expand Down

0 comments on commit cb2a537

Please sign in to comment.