blob: 2573f23c79edbb1c597b6963c8e9a644a48c28be [file] [log] [blame]
use std::path::{Path, PathBuf};
pub mod follow;
/// Splits [`Path`] into two parts separated by `target`. The `target` itself is included
/// in the end of first part.
///
/// ```
/// # use std::path::Path;
/// # use bazelci_agent::utils::split_path_inclusive;
///
/// let path = Path::new("a/b/c");
/// let (first, second) = split_path_inclusive(path, "b").unwrap();
/// assert_eq!(first, Path::new("a/b"));
/// assert_eq!(second, Path::new("c"));
/// ```
///
pub fn split_path_inclusive(path: &Path, target: &str) -> Option<(PathBuf, PathBuf)> {
let mut iter = path.iter();
let mut first = PathBuf::new();
let mut found = false;
while let Some(comp) = iter.next() {
first.push(Path::new(comp));
if comp == target {
found = true;
break;
}
}
if found {
let second: PathBuf = iter.collect();
Some((first, second))
} else {
None
}
}