summaryrefslogtreecommitdiffstats
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-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),