use std::collections::BTreeMap;
use std::path::PathBuf;
#[cfg(all(target_os = "linux", feature = "sandbox"))]
pub mod linux;
#[cfg(all(target_os = "linux", feature = "sandbox"))]
pub mod linux_ptrace;
#[cfg(all(target_os = "macos", feature = "sandbox"))]
pub mod darwin;
pub fn group_paths_by_parent(paths: &[PathBuf]) -> Vec<String> {
let mut groups: BTreeMap<PathBuf, Vec<String>> = BTreeMap::new();
for path in paths {
let (parent, name) = match (path.parent(), path.file_name()) {
(Some(parent), Some(name)) => {
(parent.to_path_buf(), name.to_string_lossy().to_string())
}
_ => (PathBuf::new(), path.display().to_string()),
};
groups.entry(parent).or_default().push(name);
}
groups
.into_iter()
.map(|(parent, mut names)| {
names.sort();
let parent_str = parent.display().to_string();
if names.len() == 1 {
if parent_str.is_empty() {
names.remove(0)
} else {
format!("{}/{}", parent_str, names[0])
}
} else {
format!("{}/{{{}}}", parent_str, names.join(", "))
}
})
.collect()
}