diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-08-03 14:16:17 +0200 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-08-03 14:16:17 +0200 |
| commit | ee3bb3cce727f96ee2bc7cc8d9d320706eace5c2 (patch) | |
| tree | 127ede56a3fe4b1cc5e2921398daf66a62eaceaa /cli/src/search.rs | |
| parent | 49e14e27165ef5dd1884e6d31cd5ff39314118be (diff) | |
| download | money-ee3bb3cce727f96ee2bc7cc8d9d320706eace5c2.tar.gz | |
parse strings
Diffstat (limited to 'cli/src/search.rs')
| -rw-r--r-- | cli/src/search.rs | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/cli/src/search.rs b/cli/src/search.rs index b11ee78..c25b458 100644 --- a/cli/src/search.rs +++ b/cli/src/search.rs @@ -1,5 +1,5 @@ use chrono::{naive::NaiveDate, Duration}; -use nom::{branch::alt, character::complete::char, combinator::map, sequence::tuple}; +use nom::{branch::alt, bytes::complete::is_not, character::complete::{alphanumeric1, char}, combinator::{map, recognize}, complete::tag, sequence::{delimited, preceded, terminated, tuple}}; use rust_decimal::Decimal; use std::str::FromStr; @@ -105,6 +105,13 @@ impl Constraint { } } +fn string(i: &str) -> nom::IResult<&str, &str> { + alt(( + delimited(char('"'), is_not("\""), char('"')), + recognize(alphanumeric1), + ))(i) +} + #[derive(Clone)] pub enum Filter { Union(Constraint), @@ -116,18 +123,18 @@ impl Filter { fn parse(i: &str) -> nom::IResult<&str, Self> { alt(( map( - tuple(( + preceded( char('+'), Constraint::parse, - )), - |(_, constraint)| Filter::Union(constraint) + ), + Filter::Union ), map( - tuple(( + preceded( char('-'), Constraint::parse, - )), - |(_, constraint)| Filter::Subtract(constraint) + ), + Filter::Subtract ), map(Constraint::parse, Filter::Intersect), ))(i) |
