use std::{ path::PathBuf, time::{Duration, SystemTime}, }; pub use self::error::Error; pub use self::git::GitProject; pub use self::path::PathProject; mod error; mod git; mod path; pub type ProjectItem = Box>; pub trait Timestamp { type Error; fn timestamp(&self) -> Result; } impl Timestamp for T where T: AsRef, { type Error = Error; fn timestamp(&self) -> Result { self.as_ref() .metadata()? .modified()? .duration_since(SystemTime::UNIX_EPOCH) .map_err(Into::into) } } 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() } }