use crate::parser::*;
use std::marker::PhantomData;
pub struct PInto<P, In, Out> {
p: P,
out: Out,
_marker: PhantomData<In>,
}
pub fn pinto<P, In, Out>(p: P, out: Out) -> PInto<P, In, Out> {
PInto {
p,
out,
_marker: PhantomData,
}
}
impl<'a, K, P, In, Out> ParserCore<'a, K, Out> for PInto<P, In, Out>
where
K: PartialEq + Clone + 'a,
In: 'a,
P: Parser<'a, K, In>,
Out: PartialEq + Clone,
{
fn parse(&self, i: PInput<'a, K>) -> Result<PSuccess<'a, K, Out>, PFail<'a, K>> {
let PSuccess { val: _, rest } = self.p.parse(i)?;
Ok(PSuccess {
val: self.out.clone(),
rest,
})
}
}
impl<'a, K, P, In, Out> Parser<'a, K, Out> for PInto<P, In, Out>
where
K: PartialEq + Clone + 'a,
Out: PartialEq + Clone + 'a,
In: 'a,
P: Parser<'a, K, In>,
{
}