diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-08-02 20:05:41 +0200 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-08-02 20:05:41 +0200 |
| commit | 3185d07cc8217ce54da3dd1b8854336830b1bcb2 (patch) | |
| tree | 57f223acd724e1e1643f3ec931ef816c13fb6a82 /cli/src | |
| parent | c749ddb23b7cab3320d2f771628a5426914518db (diff) | |
| download | money-3185d07cc8217ce54da3dd1b8854336830b1bcb2.tar.gz | |
multiple filters as constraints
Diffstat (limited to 'cli/src')
| -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), |
