summaryrefslogtreecommitdiffstats
path: root/cli/src
diff options
context:
space:
mode:
Diffstat (limited to 'cli/src')
-rw-r--r--cli/src/search.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/cli/src/search.rs b/cli/src/search.rs
index d140caf..b11ee78 100644
--- a/cli/src/search.rs
+++ b/cli/src/search.rs
@@ -1,4 +1,5 @@
use chrono::{naive::NaiveDate, Duration};
+use nom::{branch::alt, character::complete::char, combinator::map, sequence::tuple};
use rust_decimal::Decimal;
use std::str::FromStr;
@@ -98,6 +99,10 @@ impl Constraint {
}
}
}
+
+ fn parse(i: &str) -> nom::IResult<&str, Self> {
+ todo!()
+ }
}
#[derive(Clone)]
@@ -107,6 +112,28 @@ pub enum Filter {
Subtract(Constraint),
}
+impl Filter {
+ fn parse(i: &str) -> nom::IResult<&str, Self> {
+ alt((
+ map(
+ tuple((
+ char('+'),
+ Constraint::parse,
+ )),
+ |(_, constraint)| Filter::Union(constraint)
+ ),
+ map(
+ tuple((
+ char('-'),
+ Constraint::parse,
+ )),
+ |(_, constraint)| Filter::Subtract(constraint)
+ ),
+ map(Constraint::parse, Filter::Intersect),
+ ))(i)
+ }
+}
+
#[derive(Clone)]
pub struct Search<'t> {
filtered: Vec<usize>,