diff options
| -rw-r--r-- | src/lib.rs | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -740,6 +740,36 @@ where } } +struct Not<P> { + parser: P, +} + +impl<I, P> Parser<I> for Not<P> +where + I: Input, + P: Parser<I>, +{ + type Output = (); + + fn run<OM: Mode, EM: Mode, T: Trace<I>>( + &mut self, + it: InputIter<I>, + ) -> ParserResult<I, Self::Output, OM, EM> { + match self.parser.check(it.clone()) { + Ok(_) => Ok((it, OM::bind(|| ()))), + Err(rest) => Err(EM::bind(|| rest)), + } + } +} + +pub fn not<I, P>(parser: P) -> impl Parser<I, Output = ()> +where + I: Input, + P: Parser<I>, +{ + Not { parser } +} + pub fn alpha<I>() -> impl Parser<I, Output = I> where I: Input, |
