-use nom::{error::ParseError, IResult, sequence::{delimited, preceded, terminated, tuple}, multi::{many0_count, many1, separated_list1}, bytes::complete::{escaped_transform, tag, take_while1, take_until}, character::{is_alphabetic, complete::{alpha1, multispace0, none_of}}, combinator::{map, value}, branch::alt};
+use nom::{
+ branch::alt,
+ bytes::complete::{escaped_transform, tag, take_until, take_while1},
+ character::{
+ complete::{alpha1, multispace0, none_of},
+ is_alphabetic,
+ },
+ combinator::{map, value},
+ error::ParseError,
+ multi::{many0_count, many1, separated_list1},
+ sequence::{delimited, preceded, terminated, tuple},
+ IResult,
+};
fn ws<'a, F: 'a, O, E: ParseError<&'a str>>(inner: F) -> impl FnMut(&'a str) -> IResult<&'a str, O, E>
where
F: FnMut(&'a str) -> IResult<&'a str, O, E>,
{
- delimited(
- multispace0,
- inner,
- multispace0
- )
+ delimited(multispace0, inner, multispace0)
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[test]
fn filter_parse() {
let expected = Or(vec![
- And(vec![
- Not {
- negate: false,
- field: Field::Parens(Box::new(
- Or(vec![
- And(vec![
- Not { negate: false, field: Field::Format("KnockOutWhist") },
- Not { negate: true, field: Field::Title("Superb Game") },
- ])
- ])
- ))
- }
- ]),
- And(vec![
- Not { negate: false, field: Field::Format("TexasHoldEm") },
- ])
+ And(vec![Not {
+ negate: false,
+ field: Field::Parens(Box::new(Or(vec![And(vec![
+ Not { negate: false, field: Field::Format("KnockOutWhist") },
+ Not { negate: true, field: Field::Title("Superb Game") },
+ ])]))),
+ }]),
+ And(vec![Not { negate: false, field: Field::Format("TexasHoldEm") }]),
]);
let actual = parse_filter("(format: KnockOutWhist and not title: \"Superb Game\") or format: TexasHoldEm").unwrap().1;
assert_eq!(expected, actual);