From 3185d07cc8217ce54da3dd1b8854336830b1bcb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Mon, 2 Aug 2021 20:05:41 +0200 Subject: multiple filters as constraints --- cli/src/search.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'cli') 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), } 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), -- cgit v1.2.1