Implement --range

This commit is contained in:
Joscha 2021-12-19 00:36:40 +01:00
parent ff627b98df
commit e9ec2998f0
4 changed files with 91 additions and 33 deletions

View file

@ -1,10 +1,14 @@
use chrono::NaiveDate;
use crate::files::arguments::{Range, RangeDate};
use crate::files::Files;
use self::command::CommandState;
pub use self::date::Dates;
use self::delta::Delta;
use self::entry::Entries;
pub use self::entry::{Entry, EntryKind, EntryMode};
pub use self::error::{Error, Result};
pub use self::error::{Error, Result, SourceInfo};
pub use self::range::DateRange;
mod command;
@ -26,3 +30,32 @@ impl Files {
Ok(entries.entries())
}
}
impl Range {
pub fn eval(&self, index: usize, today: NaiveDate) -> Result<DateRange> {
let mut start = match self.start {
RangeDate::Date(d) => d,
RangeDate::Today => today,
};
if let Some(delta) = &self.start_delta {
let delta: Delta = delta.into();
start = delta.apply_date(index, start)?;
}
let mut end = start;
match self.end {
Some(RangeDate::Date(d)) => end = d,
Some(RangeDate::Today) => end = today,
None => {}
}
if let Some(delta) = &self.end_delta {
let delta: Delta = delta.into();
end = delta.apply_date(index, end)?;
}
Ok(DateRange::new(start, end))
}
}