| 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 | |
| } | |
| } |