use std::{path::PathBuf, time::Duration}; pub mod path; #[cfg(feature = "git")] pub mod git; pub type ProjectParserGroup = Vec>; pub trait ProjectParser { fn parse(&self, path_buf: PathBuf) -> Option; } impl ProjectParser for ProjectParserGroup { fn parse(&self, path_buf: std::path::PathBuf) -> Option { self.iter().find_map(|p| p.parse(path_buf.to_owned())) } } pub type ProjectItem = Box; pub trait Project: Timestamp { fn to_path_buf(&self) -> &PathBuf; } impl Project for T where T: Timestamp, T: AsRef, { fn to_path_buf(&self) -> &PathBuf { self.as_ref() } } pub trait Timestamp { fn timestamp(&self) -> &Duration; } impl Timestamp for T where T: AsRef, { fn timestamp(&self) -> &Duration { self.as_ref() } }