Skip to main content

provenant/utils/
path.rs

1pub(crate) fn parent_dir(path: &str) -> &str {
2    path.rsplit_once('/').map_or("", |(parent, _)| parent)
3}
4
5pub(crate) fn parent_dir_for_lookup(path: &str) -> Option<&str> {
6    if path.is_empty() {
7        return None;
8    }
9
10    path.rsplit_once('/').map(|(parent, _)| parent).or(Some(""))
11}
12
13#[cfg(test)]
14mod tests {
15    use super::{parent_dir, parent_dir_for_lookup};
16
17    #[test]
18    fn parent_dir_handles_top_level_paths() {
19        assert_eq!(parent_dir("package.json"), "");
20        assert_eq!(parent_dir("packages/app/package.json"), "packages/app");
21    }
22
23    #[test]
24    fn parent_dir_for_lookup_walks_up_to_empty_root() {
25        assert_eq!(parent_dir_for_lookup("packages/app"), Some("packages"));
26        assert_eq!(parent_dir_for_lookup("packages"), Some(""));
27        assert_eq!(parent_dir_for_lookup(""), None);
28    }
29}