use std::marker::PhantomData;
use crate::prelude::{Error, PInput, PSuccess, Parser, ParserCore};
#[derive(Clone)]
pub struct PThenIgnore<P1, P2, OI> {
then: P1,
ignore: P2,
_marker: PhantomData<OI>,
}
pub fn pthen_ignore<P1, P2, OI>(then: P1, ignore: P2) -> PThenIgnore<P1, P2, OI> {
PThenIgnore {
then,
ignore,
_marker: PhantomData,
}
}
impl<'a, K, O, P1, P2, OI> ParserCore<'a, K, O> for PThenIgnore<P1, P2, OI>
where
K: PartialEq + Clone + 'a,
O: Clone + 'a,
OI: Clone + 'a,
P1: Parser<'a, K, O>,
P2: Parser<'a, K, OI>,
{
fn parse(&self, i: PInput<'a, K>) -> Result<PSuccess<'a, K, O>, Error<'a, K>> {
let PSuccess { val, rest } = self.then.parse(i)?;
let PSuccess { val: _, rest } = self.ignore.parse(rest)?;
Ok(PSuccess { val, rest })
}
}
impl<'a, K, O, P1, P2, OI> Parser<'a, K, O> for PThenIgnore<P1, P2, OI>
where
K: PartialEq + Clone + 'a,
O: Clone + 'a,
OI: Clone + 'a,
P1: Parser<'a, K, O>,
P2: Parser<'a, K, OI>,
{
}