summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2022-11-28 01:45:38 -0600
committerToby Vincent <tobyv13@gmail.com>2022-11-28 01:45:38 -0600
commit3c3c95b54d12b1654c5c0810f7431190bc7d7580 (patch)
treec06be9a70fb259ba8f77a673db898c7d7e281810 /src
parent3f188dea518fe29324f7a2416316c436cea8e88a (diff)
feat: add previewer trait
Diffstat (limited to 'src')
-rw-r--r--src/project.rs38
-rw-r--r--src/project/error.rs3
-rw-r--r--src/project/git.rs20
3 files changed, 55 insertions, 6 deletions
diff --git a/src/project.rs b/src/project.rs
index 5f1edc5..e6faf66 100644
--- a/src/project.rs
+++ b/src/project.rs
@@ -1,5 +1,7 @@
use std::{
+ io::Write,
path::PathBuf,
+ process::{Command, Stdio},
time::{Duration, SystemTime},
};
@@ -13,6 +15,20 @@ mod path;
pub type ProjectItem = Box<dyn Project<Error = Error>>;
+pub trait Project: Timestamp {
+ fn to_path_buf(&self) -> &PathBuf;
+}
+
+impl<T> Project for T
+where
+ T: Timestamp,
+ T: AsRef<PathBuf>,
+{
+ fn to_path_buf(&self) -> &PathBuf {
+ self.as_ref()
+ }
+}
+
pub trait Timestamp {
type Error;
@@ -34,16 +50,26 @@ where
}
}
-pub trait Project: Timestamp {
- fn to_path_buf(&self) -> &PathBuf;
+pub trait Preview {
+ type Error;
+
+ fn preview(&self) -> Result<(), Self::Error>;
}
-impl<T> Project for T
+impl<T> Preview for T
where
- T: Timestamp,
T: AsRef<PathBuf>,
{
- fn to_path_buf(&self) -> &PathBuf {
- self.as_ref()
+ 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)
}
}
diff --git a/src/project/error.rs b/src/project/error.rs
index 7047533..ddfcb2a 100644
--- a/src/project/error.rs
+++ b/src/project/error.rs
@@ -8,4 +8,7 @@ pub enum Error {
#[error(transparent)]
SystemTime(#[from] std::time::SystemTimeError),
+
+ #[error(transparent)]
+ Other(#[from] anyhow::Error),
}
diff --git a/src/project/git.rs b/src/project/git.rs
index 17573c3..876af1c 100644
--- a/src/project/git.rs
+++ b/src/project/git.rs
@@ -1,8 +1,11 @@
use git2::{BranchType, Repository};
use ignore::DirEntry;
+use onefetch::ui::printer::Printer;
+use std::io;
use std::{cmp::Ordering, path::PathBuf, time::Duration};
use crate::project::Error;
+use crate::project::Preview;
use crate::project::Timestamp;
use crate::Project;
@@ -57,6 +60,23 @@ impl Project for GitProject {
}
}
+impl Preview for GitProject {
+ type Error = Error;
+
+ fn preview(&self) -> Result<(), Self::Error> {
+ // onefetch --include-hidden --show-logo=auto
+ let config = onefetch::cli::Config {
+ input: self.path_buf.to_owned(),
+ ..Default::default()
+ };
+
+ let info = onefetch::info::Info::new(&config)?;
+ let mut printer = Printer::new(io::BufWriter::new(io::stdout()), info, config)?;
+
+ printer.print().map_err(Into::into)
+ }
+}
+
impl PartialEq for GitProject {
fn eq(&self, other: &Self) -> bool {
match (self.latest_commit, other.latest_commit) {