Implement --range
This commit is contained in:
parent
ff627b98df
commit
e9ec2998f0
4 changed files with 91 additions and 33 deletions
35
src/eval.rs
35
src/eval.rs
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue