From e98c5e7a12c8ad07a327f6c5d9750c1a70bf53a4 Mon Sep 17 00:00:00 2001 From: Thomas Eppers Date: Sat, 23 Jul 2022 00:38:44 +0200 Subject: [PATCH] changed format_time_nice to a trait that extends chrono::Duration --- src/common/display_duration_ext.rs | 28 ++++++++++++++++++++++++++++ src/common/mod.rs | 1 + src/main.rs | 1 + src/repository/mod.rs | 26 ++------------------------ 4 files changed, 32 insertions(+), 24 deletions(-) create mode 100644 src/common/display_duration_ext.rs create mode 100644 src/common/mod.rs diff --git a/src/common/display_duration_ext.rs b/src/common/display_duration_ext.rs new file mode 100644 index 0000000..062a394 --- /dev/null +++ b/src/common/display_duration_ext.rs @@ -0,0 +1,28 @@ +pub trait DisplayDurationExt { + /// displays a duration in a human readable form + fn display(&self) -> String; +} + +impl DisplayDurationExt for chrono::Duration { + fn display(&self) -> String { + if self.num_weeks() == 52 { + format!("{} Year", (self.num_weeks() / 52) as i32) + } else if self.num_weeks() > 103 { + format!("{} Years", (self.num_weeks() / 52) as i32) + } else if self.num_days() == 1 { + format!("{} Day", self.num_days()) + } else if self.num_days() > 1 { + format!("{} Days", self.num_days()) + } else if self.num_hours() == 1 { + format!("{} Hour", self.num_hours()) + } else if self.num_hours() > 1 { + format!("{} Hours", self.num_hours()) + } else if self.num_minutes() == 1 { + format!("{} Minute", self.num_minutes()) + } else if self.num_minutes() > 1 { + format!("{} Minutes", self.num_minutes()) + } else { + format!("{} Seconds", self.num_seconds()) + } + } +} diff --git a/src/common/mod.rs b/src/common/mod.rs new file mode 100644 index 0000000..7ec6e71 --- /dev/null +++ b/src/common/mod.rs @@ -0,0 +1 @@ +pub mod display_duration_ext; diff --git a/src/main.rs b/src/main.rs index 9ab4dba..6204108 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ use std::path::PathBuf; use structopt::StructOpt; +mod common; mod repo; mod repository; mod ui; diff --git a/src/repository/mod.rs b/src/repository/mod.rs index 1b5895a..9abd790 100644 --- a/src/repository/mod.rs +++ b/src/repository/mod.rs @@ -5,6 +5,7 @@ use std::fmt; use chrono::DateTime; +use crate::common::display_duration_ext::DisplayDurationExt; use crate::repo; #[derive(Debug, PartialEq)] @@ -54,7 +55,7 @@ impl Tag { let now = chrono::Utc::now(); let rfc3339 = DateTime::parse_from_rfc3339(last_updated).unwrap(); let dif = now - rfc3339.with_timezone(&chrono::Utc); - format!(", {} old", format_time_nice(dif)) + format!(", {} old", dif.display()) } }; @@ -109,29 +110,6 @@ impl Repo { } } -/// converts a given duration to a readable string -fn format_time_nice(time: chrono::Duration) -> String { - if time.num_weeks() == 52 { - format!("{} Year", (time.num_weeks() / 52) as i32) - } else if time.num_weeks() > 103 { - format!("{} Years", (time.num_weeks() / 52) as i32) - } else if time.num_days() == 1 { - format!("{} Day", time.num_days()) - } else if time.num_days() > 1 { - format!("{} Days", time.num_days()) - } else if time.num_hours() == 1 { - format!("{} Hour", time.num_hours()) - } else if time.num_hours() > 1 { - format!("{} Hours", time.num_hours()) - } else if time.num_minutes() == 1 { - format!("{} Minute", time.num_minutes()) - } else if time.num_minutes() > 1 { - format!("{} Minutes", time.num_minutes()) - } else { - format!("{} Seconds", time.num_seconds()) - } -} - /// checks the repo name and may add a prefix for official images pub fn check_repo(name: &str) -> Result { let repo = match repo::split_tag_from_repo(name) {