summaryrefslogtreecommitdiff
path: root/src/traits.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/traits.rs')
-rw-r--r--src/traits.rs14
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()) {