commit - a4f410d9500b9babe01f7d6ae891e8cd3377deed
commit + e88c26a494cef60959734d389bb7f95e9b55458b
blob - 1a44f0ccf6ce98c28933541eab3bb7dd5fef7b47
blob + 848d68da02d430dbec3714568f5a86df0f00e779
--- src/main.rs
+++ src/main.rs
Flagged,
}
+trait Operation {
+ fn filter(&self, p: &raur::Package) -> bool;
+ fn format(&self, p: &raur::Package) -> String;
+}
+
+impl Operation for Commands {
+ fn filter(&self, p: &raur::Package) -> bool {
+ match self {
+ Self::Flagged => p.out_of_date.is_some(),
+ }
+ }
+
+ fn format(&self, p: &raur::Package) -> String {
+ match self {
+ Self::Flagged => {
+ if let Some(d) = p.out_of_date {
+ if let Some(date) = chrono::naive::NaiveDateTime::from_timestamp_opt(d, 0) {
+ let d = date.format("%Y-%m-%d").to_string();
+ format!("{}: {}", p.name, d)
+ } else {
+ eprintln!("Invalid UNIX timestamp: {}", d);
+ format!("{}: {}", p.name, d)
+ }
+ } else {
+ p.name.to_string()
+ }
+ }
+ }
+ }
+}
+
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let args = Arguments::parse();
- let filter = if args.command == Commands::Flagged {
- flagged_filter
- } else {
- |_: &raur::Package| true
- };
-
let pacmanconf = pacmanconf::Config::new()?;
let mut alpm = alpm::Alpm::new(pacmanconf.root_dir.as_str(), pacmanconf.db_path.as_str())?;
alpm_utils::configure_alpm(&mut alpm, &pacmanconf)?;
.info(&packages)
.await?
.into_iter()
- .filter(filter)
+ .filter(|p| args.command.filter(p))
.collect::<Vec<_>>();
for p in info {
- println!("{}", flagged_formatter(&p));
+ println!("{}", args.command.format(&p));
}
Ok(())
}
-
-fn flagged_filter(p: &raur::Package) -> bool {
- p.out_of_date.is_some()
-}
-
-fn flagged_formatter(p: &raur::Package) -> String {
- if let Some(d) = p.out_of_date {
- if let Some(date) = chrono::naive::NaiveDateTime::from_timestamp_opt(d, 0) {
- let d = date.format("%Y-%m-%d").to_string();
- format!("{}: {}", p.name, d)
- } else {
- eprintln!("Invalid UNIX timestamp: {}", d);
- format!("{}: {}", p.name, d)
- }
- } else {
- p.name.to_string()
- }
-}