diff options
| -rw-r--r-- | cli/src/search.rs | 13 |
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), |
