Add new trait PathExt & impl for Path

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
Jiahao XU 2022-06-12 01:46:10 +10:00
parent 0162f5f462
commit cb2be5a882
No known key found for this signature in database
GPG key ID: 591C0B03040416D6
2 changed files with 37 additions and 0 deletions

View file

@ -24,6 +24,9 @@ pub use extracter::TarEntriesVisitor;
mod readable_rx;
mod path_ext;
pub use path_ext::*;
/// Load binstall metadata from the crate `Cargo.toml` at the provided path
pub fn load_manifest_path<P: AsRef<Path>>(
manifest_path: P,

34
src/helpers/path_ext.rs Normal file
View file

@ -0,0 +1,34 @@
use std::path::{Component, Path, PathBuf};
trait PathExt {
fn normalize_path(&self) -> PathBuf;
}
impl PathExt for Path {
fn normalize_path(&self) -> PathBuf {
let mut components = self.components().peekable();
let mut ret = if let Some(c @ Component::Prefix(..)) = components.peek().cloned() {
components.next();
PathBuf::from(c.as_os_str())
} else {
PathBuf::new()
};
for component in components {
match component {
Component::Prefix(..) => unreachable!(),
Component::RootDir => {
ret.push(component.as_os_str());
}
Component::CurDir => {}
Component::ParentDir => {
ret.pop();
}
Component::Normal(c) => {
ret.push(c);
}
}
}
ret
}
}