use {
std::path::{Components, PathBuf},
};
pub fn longest_common_ancestor(paths: &[PathBuf]) -> PathBuf {
match paths.len() {
0 => PathBuf::new(), 1 => paths[0].clone(),
_ => {
let cs0 = paths[0].components();
let mut csi: Vec<Components> = paths
.iter()
.skip(1)
.map(|p| p.components())
.collect();
let mut lca = PathBuf::new();
for component in cs0 {
for cs in &mut csi {
if cs.next() != Some(component) {
return lca;
}
}
lca.push(component);
}
lca
}
}
}