aboutsummaryrefslogtreecommitdiffstats
path: root/src/project.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/project.rs')
-rw-r--r--src/project.rs55
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)
- }
-}