summaryrefslogtreecommitdiffstats
path: root/cli/src
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-08-03 14:16:17 +0200
committerGustav Sörnäs <gustav@sornas.net>2021-08-03 14:16:17 +0200
commitee3bb3cce727f96ee2bc7cc8d9d320706eace5c2 (patch)
tree127ede56a3fe4b1cc5e2921398daf66a62eaceaa /cli/src
parent49e14e27165ef5dd1884e6d31cd5ff39314118be (diff)
downloadmoney-ee3bb3cce727f96ee2bc7cc8d9d320706eace5c2.tar.gz
parse strings
Diffstat (limited to 'cli/src')
-rw-r--r--cli/src/search.rs21
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)