diff options
| -rw-r--r-- | cli/src/search.rs | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/cli/src/search.rs b/cli/src/search.rs index ff9f772..7359b19 100644 --- a/cli/src/search.rs +++ b/cli/src/search.rs @@ -6,11 +6,6 @@ use crate::transaction::{Category, Transaction}; //TODO tests -pub struct Search<'t> { - filtered: Vec<usize>, - transactions: Vec<&'t Transaction>, -} - #[derive(Clone)] pub enum DateIsh { Absolute(NaiveDate), @@ -50,6 +45,22 @@ pub enum Comparison { LessOrEqual, } +fn parse_comparison(s: &str) -> Option<(Decimal, Comparison)> { + if s.starts_with(">=") { + Some((Decimal::from_str(&s[2..]).ok()?, Comparison::GreaterOrEqual)) + } else if s.starts_with("<=") { + Some((Decimal::from_str(&s[2..]).ok()?, Comparison::LessOrEqual)) + } else if s.starts_with("=") { + Some((Decimal::from_str(&s[1..]).ok()?, Comparison::Equal)) + } else if s.starts_with(">") { + Some((Decimal::from_str(&s[1..]).ok()?, Comparison::Greater)) + } else if s.starts_with("<") { + Some((Decimal::from_str(&s[1..]).ok()?, Comparison::Less)) + } else { + None + } +} + pub enum Constraint { Category(Category), Before(DateIsh), @@ -120,6 +131,11 @@ impl FilterType { } } +pub struct Search<'t> { + filtered: Vec<usize>, + transactions: Vec<&'t Transaction>, +} + impl<'t> Search<'t> { pub fn new(transactions: Vec<&'t Transaction>) -> Self { Self { @@ -167,19 +183,3 @@ impl<'t> Search<'t> { self } } - -fn parse_comparison(s: &str) -> Option<(Decimal, Comparison)> { - if s.starts_with(">=") { - Some((Decimal::from_str(&s[2..]).ok()?, Comparison::GreaterOrEqual)) - } else if s.starts_with("<=") { - Some((Decimal::from_str(&s[2..]).ok()?, Comparison::LessOrEqual)) - } else if s.starts_with("=") { - Some((Decimal::from_str(&s[1..]).ok()?, Comparison::Equal)) - } else if s.starts_with(">") { - Some((Decimal::from_str(&s[1..]).ok()?, Comparison::Greater)) - } else if s.starts_with("<") { - Some((Decimal::from_str(&s[1..]).ok()?, Comparison::Less)) - } else { - None - } -} |
