summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-08-02 20:05:41 +0200
committerGustav Sörnäs <gustav@sornas.net>2021-08-02 20:05:41 +0200
commit3185d07cc8217ce54da3dd1b8854336830b1bcb2 (patch)
tree57f223acd724e1e1643f3ec931ef816c13fb6a82
parentc749ddb23b7cab3320d2f771628a5426914518db (diff)
downloadmoney-3185d07cc8217ce54da3dd1b8854336830b1bcb2.tar.gz
multiple filters as constraints
-rw-r--r--cli/src/search.rs13
1 files changed, 12 insertions, 1 deletions
diff --git a/cli/src/search.rs b/cli/src/search.rs
index aecca69..476d252 100644
--- a/cli/src/search.rs
+++ b/cli/src/search.rs
@@ -67,6 +67,7 @@ pub enum Constraint {
After(DateIsh),
On(DateIsh),
AmountCompare(Decimal, Comparison),
+ Filters(Vec<Filter>),
}
impl Constraint {
@@ -83,11 +84,21 @@ impl Constraint {
Comparison::Less => &transaction.amount < amount,
Comparison::LessOrEqual => &transaction.amount <= amount,
}
+ Constraint::Filters(filters) => {
+ filters
+ .iter()
+ .fold(true, |include, filter| match filter {
+ Filter::Union(constraint) => include || constraint.satisfies(transaction),
+ Filter::Intersect(constraint) => include && constraint.satisfies(transaction),
+ Filter::Subtract(constraint) => include && !constraint.satisfies(transaction),
+ }
+ )
+ }
}
}
}
-enum Filter {
+pub enum Filter {
Union(Constraint),
Intersect(Constraint),
Subtract(Constraint),