use ignore::DirEntry; use std::path::PathBuf; #[derive(Debug, PartialEq, Eq, Clone, Default)] pub struct PathProject(PathBuf); impl PathProject { fn new(path_buf: PathBuf) -> Self { Self(path_buf) } } impl AsRef for PathProject { fn as_ref(&self) -> &PathBuf { &self.0 } } impl TryFrom<(&String, DirEntry)> for PathProject { type Error = String; fn try_from((pattern, dir_entry): (&String, DirEntry)) -> Result { dir_entry .path() .join(pattern) .exists() .then(|| Self::from(dir_entry.to_owned())) .ok_or_else(|| { format!( "Pattern `{:?}` not found in path: `{:?}`", pattern, dir_entry ) }) } } impl From for PathProject { fn from(value: DirEntry) -> Self { Self::new(value.into_path()) } } impl From for PathBuf { fn from(value: PathProject) -> Self { value.0 } }