diff options
-rw-r--r-- | src/traits.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/traits.rs b/src/traits.rs index a24a689..091709a 100644 --- a/src/traits.rs +++ b/src/traits.rs @@ -1,5 +1,6 @@ use chrono::{DateTime, Local, Utc}; use colored::Colorize; +use core::cmp::PartialEq; pub trait IsStation { fn name(&self) -> &str; @@ -8,12 +9,19 @@ pub trait IsStation { fn ds100(&self) -> &str; fn to_fancy_string(&self) -> String { + // travelynx literally sends this entire precise date in case of an + // unknown time instead of, like, a null + let epoch = "1970-01-01T00:00:00Z".parse::<DateTime<Local>>().unwrap(); format!( "{} {} – {} ({})", self - .real_arrival() // chrono's API for timezones is expressive, but reads like c++ … - .map(|t| <DateTime<Local>>::from(*t).time().to_string()) - .unwrap_or("??:??:??".to_string()) + .real_arrival() + .map(|t| if t.eq(&epoch) { + "unknown ".to_owned() + } else { // chrono's API for timezones is expressive, but reads like c++ … + <DateTime<Local>>::from(*t).time().format("%T").to_string() + }) + .unwrap_or("<format error>".to_string()) .blue(), { let delay = match (self.real_arrival(), self.scheduled_arrival()) { |