commit e88c26a494cef60959734d389bb7f95e9b55458b from: witcher date: Sat Apr 22 16:27:44 2023 UTC add trait for operations commit - a4f410d9500b9babe01f7d6ae891e8cd3377deed commit + e88c26a494cef60959734d389bb7f95e9b55458b blob - 1a44f0ccf6ce98c28933541eab3bb7dd5fef7b47 blob + 848d68da02d430dbec3714568f5a86df0f00e779 --- src/main.rs +++ src/main.rs @@ -18,16 +18,41 @@ enum Commands { 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)?; @@ -44,29 +69,11 @@ async fn main() -> anyhow::Result<()> { .info(&packages) .await? .into_iter() - .filter(filter) + .filter(|p| args.command.filter(p)) .collect::>(); 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() - } -}