diff --git a/src/eval/date.rs b/src/eval/date.rs index ac3a3a8..15ddf6d 100644 --- a/src/eval/date.rs +++ b/src/eval/date.rs @@ -1,4 +1,6 @@ -use chrono::NaiveDate; +use std::fmt; + +use chrono::{Duration, NaiveDate}; use crate::files::commands::DoneDate; use crate::files::primitives::Time; @@ -16,6 +18,25 @@ pub struct Dates { times: Option, } +impl fmt::Display for Dates { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let (start, end) = self.start_end(); + match self.start_end_time() { + Some((start_time, end_time)) if start == end && start_time == end_time => { + write!(f, "{} {}", start, start_time) + } + Some((start_time, end_time)) if start == end => { + write!(f, "{} {} -- {}", start, start_time, end_time) + } + Some((start_time, end_time)) => { + write!(f, "{} {} -- {} {}", start, start_time, end, end_time) + } + None if start == end => write!(f, "{}", start), + None => write!(f, "{} -- {}", start, end), + } + } +} + impl Dates { pub fn new(root: NaiveDate, other: NaiveDate) -> Self { Self { @@ -92,6 +113,14 @@ impl Dates { pub fn end_time(&self) -> Option