use crate::{error::Error, parser::*};
#[derive(Clone)]
pub struct POr<P1, P2> {
p1: P1,
p2: P2,
}
pub fn por<P1, P2>(p1: P1, p2: P2) -> POr<P1, P2> {
POr { p1, p2 }
}
impl<'a, K, O, P1, P2> ParserCore<'a, K, O> for POr<P1, P2>
where
K: PartialEq + Clone + 'a,
O: Clone + 'a,
P1: Parser<'a, K, O>,
P2: Parser<'a, K, O>,
{
fn parse(&self, i: PInput<'a, K>) -> Result<PSuccess<'a, K, O>, Error<'a, K>> {
match self.p1.parse(i.clone()) {
Ok(psuccess) => Ok(psuccess),
Err(_) => self.p2.parse(i),
}
}
}
impl<'a, K, O, P1, P2> Parser<'a, K, O> for POr<P1, P2>
where
K: PartialEq + Clone + 'a,
O: Clone + 'a,
P1: Parser<'a, K, O>,
P2: Parser<'a, K, O>,
{
}