use crate::parser::{ParseResult, Parser, ParserInput, Representation}; pub struct BoxedParser<'a, I, O, E> where I: ParserInput, { inner: Box<dyn Parser<I, O, E> + 'a>, } impl<'a, I, O, E> BoxedParser<'a, I, O, E> where I: ParserInput, { pub(crate) fn new<P>(inner: P) -> Self where P: Parser<I, O, E> + 'a, { BoxedParser { inner: Box::new(inner), } } } impl<'a, I: ParserInput, O, E> Parser<I, O, E> for BoxedParser<'a, I, O, E> { fn representation(&self) -> Representation { self.inner.representation() } fn parse(&self, input: I) -> ParseResult<I, O, E> { self.inner.parse(input) } fn boxed<'b>(self) -> BoxedParser<'b, I, O, E> where Self: Sized + 'b, { self } }