summaryrefslogtreecommitdiffstats
path: root/cli/src/search.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-08-05 04:46:00 +0200
committerGustav Sörnäs <gustav@sornas.net>2021-08-05 04:46:00 +0200
commit713e33e1cde621cd2c9b4d7ab04817ca01047ef8 (patch)
treeb74cce2e867c033dbddcc6d12f0b119a76b0e816 /cli/src/search.rs
parenta1527aff319b36e046d7415865981be6239184dd (diff)
downloadmoney-main.tar.gz
filter income/expensemain
Diffstat (limited to 'cli/src/search.rs')
-rw-r--r--cli/src/search.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/cli/src/search.rs b/cli/src/search.rs
index 816dca8..41910f8 100644
--- a/cli/src/search.rs
+++ b/cli/src/search.rs
@@ -10,7 +10,7 @@ use rust_decimal::Decimal;
use std::convert::TryFrom;
use std::str::FromStr;
-use crate::transaction::{Category, Transaction};
+use crate::transaction::{Category, Transaction, TransactionKind};
//TODO tests
@@ -104,6 +104,7 @@ pub enum Constraint {
After(DateIsh),
On(DateIsh),
AmountCompare(Decimal, Comparison),
+ TransactionKind(TransactionKind),
Filters(Vec<Filter>),
}
@@ -121,6 +122,7 @@ impl Constraint {
Comparison::Less => &transaction.amount < amount,
Comparison::LessOrEqual => &transaction.amount <= amount,
},
+ Constraint::TransactionKind(kind) => &transaction.kind == kind,
Constraint::Filters(filters) => {
filters.iter().fold(true, |include, filter| match filter {
Filter::Union(constraint) => include || constraint.satisfies(transaction),
@@ -145,6 +147,9 @@ impl Constraint {
),
map(tag("week"), |_| Constraint::Filters(week_of(today()))),
map(tag("month"), |_| Constraint::Filters(month_of(today()))),
+ map(tag("expense"), |_| Constraint::TransactionKind(TransactionKind::Expense)),
+ map(tag("income"), |_| Constraint::TransactionKind(TransactionKind::Income)),
+ //TODO transfer?
map(
delimited(char('('), separated_list0(space1, Filter::parse), char(')')),
Constraint::Filters,