summaryrefslogtreecommitdiffstats
path: root/cli/src/search.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-07-29 16:47:16 +0200
committerGustav Sörnäs <gustav@sornas.net>2021-07-29 16:47:16 +0200
commit2349b42a13dc6cabf92b53d370245281b73c5395 (patch)
treed74f7541049247a5ea93f19f1a55f04967de4446 /cli/src/search.rs
parent0e2f1896ef8a2e4e85b4bf5e4d97f4bc8a032676 (diff)
downloadmoney-2349b42a13dc6cabf92b53d370245281b73c5395.tar.gz
date constraints
Diffstat (limited to 'cli/src/search.rs')
-rw-r--r--cli/src/search.rs25
1 files changed, 24 insertions, 1 deletions
diff --git a/cli/src/search.rs b/cli/src/search.rs
index d388a8b..54eea67 100644
--- a/cli/src/search.rs
+++ b/cli/src/search.rs
@@ -27,7 +27,30 @@ impl Constraint {
fn satisfies(&self, t: &Transaction) -> bool {
match self {
Constraint::Category(category) => category == &t.category,
- Constraint::Date(_) => todo!(),
+ Constraint::Date(DateFilter::Relative {
+ start,
+ end,
+ }) => {
+ if let (Some(start), Some(end)) = (start, end) {
+ assert!(start < end);
+ }
+ let now = chrono::offset::Local::today().naive_utc();
+ let start_valid = start.map(|start| t.date > now + start).unwrap_or(true);
+ let end_valid = end.map(|end| t.date < now + end).unwrap_or(true);
+ start_valid && end_valid
+ },
+ Constraint::Date(DateFilter::Absolute {
+ start,
+ end,
+ }) => {
+ if let (Some(start), Some(end)) = (start, end) {
+ assert!(start < end);
+ }
+ let now = chrono::offset::Local::today().naive_utc();
+ let start_valid = start.map(|start| t.date > start).unwrap_or(true);
+ let end_valid = end.map(|end| t.date < end).unwrap_or(true);
+ start_valid && end_valid
+ },
}
}
}