use std::path::{Component, Path, PathBuf};
pub mod load;
pub mod redact;
pub mod schema;
pub mod size;
pub mod validate;
#[cfg(test)]
mod example_test;
pub(super) fn is_absolute(path: &str) -> bool {
Path::new(path).is_absolute()
}
pub(super) fn resolve(path: &str) -> String {
let path = Path::new(path);
let absolute = if path.is_absolute() {
path.to_path_buf()
} else {
match std::env::current_dir() {
Ok(cwd) => cwd.join(path),
Err(_) => path.to_path_buf(),
}
};
let mut parts: Vec<Component> = Vec::new();
for component in absolute.components() {
match component {
Component::CurDir => {}
Component::ParentDir => match parts.last() {
Some(Component::RootDir) | None => {}
Some(Component::Normal(_)) => {
parts.pop();
}
Some(_) => parts.push(component),
},
other => parts.push(other),
}
}
let mut resolved = PathBuf::new();
for part in parts {
resolved.push(part.as_os_str());
}
resolved.to_string_lossy().into_owned()
}