use path_rs::{
CaseNormalization, PathIdentityOptions, PathRecord, deduplicate_paths, path_display_string,
path_identity_key,
};
use std::path::{Path, PathBuf};
fn main() -> Result<(), path_rs::PathError> {
let opts = PathIdentityOptions {
case: CaseNormalization::PlatformDefault,
..PathIdentityOptions::new()
};
let key_a = path_identity_key(Path::new("Foo/./Bar"), opts)?;
let key_b = path_identity_key(Path::new("Foo/Bar"), opts)?;
println!("path_identity_key(\"Foo/./Bar\") = {key_a}");
println!("path_identity_key(\"Foo/Bar\") = {key_b}");
println!("keys equal = {}", key_a == key_b);
let display = path_display_string(Path::new("src/lib.rs"));
println!("path_display_string = {display}");
let record = PathRecord::from_path("src/lib.rs", Some(opts))?;
println!(
"PathRecord path={}, display={}, key={:?}",
record.path.display(),
record.display,
record.identity_key
);
let paths = [
PathBuf::from("Foo/Bar"),
PathBuf::from("Foo/./Bar"),
PathBuf::from("other"),
];
let unique = deduplicate_paths(paths, opts)?;
println!(
"deduplicate_paths => {:?}",
unique
.iter()
.map(|p| p.display().to_string())
.collect::<Vec<_>>()
);
Ok(())
}