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