tmc_langs_util/
path_util.rs

1//! Utility functions for manipulating paths.
2
3use std::{
4    ffi::OsStr,
5    path::{Path, PathBuf},
6};
7
8/// If the path contains a component that equals the component argument, returns its parent.
9/// Ignores paths that contain __MACOSX in the parent.
10pub fn get_parent_of_component_in_path(path: &Path, component: &str) -> Option<PathBuf> {
11    if path.components().any(|c| c.as_os_str() == component) {
12        let path: PathBuf = path
13            .components()
14            .take_while(|c| c.as_os_str() != component)
15            .collect();
16        if !path.components().any(|c| c.as_os_str() == "__MACOSX") {
17            return Some(path);
18        }
19    }
20    None
21}
22
23/// Returns the path's parent path if the path's name equals the name argument.
24/// Ignores paths that contain __MACOSX in the parent.
25pub fn get_parent_of_named(path: &Path, name: &str) -> Option<PathBuf> {
26    if path.file_name() == Some(OsStr::new(name))
27        && !path.components().any(|c| c.as_os_str() == "__MACOSX")
28    {
29        return Some(path.parent().map(Path::to_path_buf).unwrap_or_default());
30    }
31    None
32}