use crate::parser::*;
#[derive(Clone)]
pub struct PSeq<P1, P2> {
p1: P1,
p2: P2,
}
pub fn pseq<P1, P2>(p1: P1, p2: P2) -> PSeq<P1, P2> {
PSeq { p1, p2 }
}
impl<'a, P1, P2, K, O1, O2> ParserCore<'a, K, (O1, O2)> for PSeq<P1, P2>
where
K: PartialEq + Clone + 'a,
O1: 'a,
O2: 'a,
P1: Parser<'a, K, O1>,
P2: Parser<'a, K, O2>,
{
fn parse(&self, i: PInput<'a, K>) -> Result<PSuccess<'a, K, (O1, O2)>, PFail<'a, K>> {
let PSuccess { val: f_val, rest } = self.p1.parse(i)?;
let PSuccess { val: s_val, rest } = self.p2.parse(rest)?;
Ok(PSuccess {
val: (f_val, s_val),
rest,
})
}
}
impl<'a, P1, P2, K, O1, O2> Parser<'a, K, (O1, O2)> for PSeq<P1, P2>
where
K: PartialEq + Clone + 'a,
O1: 'a,
O2: 'a,
P1: Parser<'a, K, O1>,
P2: Parser<'a, K, O2>,
{
}