From 778576a63c87ecd8010793ff8bb06f3b4f819574 Mon Sep 17 00:00:00 2001 From: Joscha Date: Sat, 4 Dec 2021 21:52:23 +0100 Subject: [PATCH] Use simpler date type for entries --- src/eval.rs | 1 + src/eval/date.rs | 77 +++++++++++++++++++++++++++++++++++++++++++++++ src/eval/entry.rs | 19 ++++++------ 3 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 src/eval/date.rs diff --git a/src/eval.rs b/src/eval.rs index 8536f58..c00e42e 100644 --- a/src/eval.rs +++ b/src/eval.rs @@ -7,6 +7,7 @@ pub use self::error::{Error, Result}; pub use self::range::DateRange; mod command; +mod date; mod delta; mod entry; mod error; diff --git a/src/eval/date.rs b/src/eval/date.rs new file mode 100644 index 0000000..ede3b46 --- /dev/null +++ b/src/eval/date.rs @@ -0,0 +1,77 @@ +use chrono::NaiveDate; + +use crate::files::commands::Time; + +#[derive(Debug, Clone, Copy)] +pub struct Times { + start: Time, + end: Time, +} + +impl Times { + pub fn start(&self) -> Time { + self.start + } + + pub fn end(&self) -> Time { + self.end + } +} + +#[derive(Debug, Clone, Copy)] +pub struct Dates { + start: NaiveDate, + end: NaiveDate, + times: Option, +} + +impl Dates { + pub fn new(start: NaiveDate, end: NaiveDate) -> Self { + assert!(start <= end); + Self { + start, + end, + times: None, + } + } + + pub fn new_with_time( + start: NaiveDate, + end: NaiveDate, + start_time: Time, + end_time: Time, + ) -> Self { + assert!(start <= end); + if start == end { + assert!(start_time <= end_time); + } + Self { + start, + end, + times: Some(Times { + start: start_time, + end: end_time, + }), + } + } + + pub fn start(&self) -> NaiveDate { + self.start + } + + pub fn end(&self) -> NaiveDate { + self.start + } + + pub fn times(&self) -> Option { + self.times + } + + pub fn start_time(&self) -> Option