planus_translation/util/
mod.rs1use std::path::{Component, Path, PathBuf};
2
3pub mod sorted_map;
4
5pub fn normalize_path(path: &Path) -> PathBuf {
6 let mut components = path.components().peekable();
7 let mut ret = if let Some(c @ Component::Prefix(..)) = components.peek().cloned() {
8 components.next();
9 PathBuf::from(c.as_os_str())
10 } else {
11 PathBuf::new()
12 };
13
14 for component in components {
15 match component {
16 Component::Prefix(..) => unreachable!(),
17 Component::RootDir => {
18 ret.push(component.as_os_str());
19 }
20 Component::CurDir => {}
21 Component::ParentDir => {
22 if let Some(Component::Normal(_)) = ret.components().next_back() {
23 ret.pop();
24 } else {
25 ret.push(Component::ParentDir);
26 }
27 }
28 Component::Normal(c) => {
29 ret.push(c);
30 }
31 }
32 }
33 ret
34}