use crate::parser::*;
pub struct PDebug<P> {
inner: P,
label: &'static str,
}
pub fn debug<P>(inner: P, label: &'static str) -> PDebug<P> {
PDebug { inner, label }
}
impl<'a, K, O, P> ParserCore<'a, K, O> for PDebug<P>
where
K: PartialEq + Clone + 'a,
O: 'a,
P: Parser<'a, K, O>,
{
fn parse(&self, i: PInput<'a, K>) -> Result<PSuccess<'a, K, O>, PFail<'a, K>> {
match self.inner.parse(i) {
Ok(psuccess) => {
println!("Successfully parsed with {}", self.label);
Ok(psuccess)
}
Err(PFail { error, span, rest }) => {
println!(
"Failed {}: with msg: {} at position span ({}, {})",
self.label,
error.last().unwrap(),
span.last().unwrap().0,
span.last().unwrap().1
);
Err(PFail { error, span, rest })
}
}
}
}
impl<'a, K, O, Inner> Parser<'a, K, O> for PDebug<Inner>
where
K: PartialEq + Clone + 'a,
O: 'a,
Inner: Parser<'a, K, O>,
{
}