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