diff options
Diffstat (limited to 'src/project.rs')
-rw-r--r-- | src/project.rs | 55 |
1 files changed, 15 insertions, 40 deletions
diff --git a/src/project.rs b/src/project.rs index e6faf66..5486dc1 100644 --- a/src/project.rs +++ b/src/project.rs @@ -1,19 +1,15 @@ -use std::{ - io::Write, - path::PathBuf, - process::{Command, Stdio}, - time::{Duration, SystemTime}, -}; +use std::{path::PathBuf, time::Duration}; pub use self::error::Error; -pub use self::git::GitProject; -pub use self::path::PathProject; mod error; -mod git; -mod path; +pub mod path; -pub type ProjectItem = Box<dyn Project<Error = Error>>; +#[cfg(feature = "git")] +pub mod git; + + +pub type ProjectItem = Box<dyn Project>; pub trait Project: Timestamp { fn to_path_buf(&self) -> &PathBuf; @@ -29,47 +25,26 @@ where } } -pub trait Timestamp { - type Error; +pub trait ProjectParser { + fn parse_project(&self, path_buf: PathBuf) -> Option<ProjectItem>; +} - fn timestamp(&self) -> Result<Duration, Self::Error>; +pub trait Timestamp { + fn timestamp(&self) -> &Duration; } impl<T> Timestamp for T where - T: AsRef<PathBuf>, + T: AsRef<Duration>, { - type Error = Error; - - fn timestamp(&self) -> Result<Duration, Self::Error> { + fn timestamp(&self) -> &Duration { self.as_ref() - .metadata()? - .modified()? - .duration_since(SystemTime::UNIX_EPOCH) - .map_err(Into::into) } } +#[cfg(feature = "preview")] pub trait Preview { type Error; fn preview(&self) -> Result<(), Self::Error>; } - -impl<T> Preview for T -where - T: AsRef<PathBuf>, -{ - type Error = std::io::Error; - - fn preview(&self) -> Result<(), Self::Error> { - let output = Command::new("ls") - .arg("-l") - .arg("-a") - .arg(self.to_path_buf()) - .stdout(Stdio::piped()) - .output()?; - - std::io::stdout().write_all(&output.stdout) - } -} |