diff --git a/src/roxy.rs b/src/roxy.rs index bd80992..f7f6f0d 100644 --- a/src/roxy.rs +++ b/src/roxy.rs @@ -6,18 +6,23 @@ use std::{ use crate::error::Error; -pub trait Parse { - fn parse(&mut self, path: &str, src: &[u8], dst: &mut Vec) -> Result<(), Error>; +pub trait AsParse { + fn as_parse(&self) -> &dyn Parse; + fn as_parse_mut(&mut self) -> &mut dyn Parse; +} - fn as_dyn(&self) -> &dyn Parse where Self: Sized { +impl AsParse for P { + fn as_parse(&self) -> &dyn Parse { + self + } + + fn as_parse_mut(&mut self) -> &mut dyn Parse { self } } -impl Into> for (P,) { - fn into(self) -> Box { - Box::new(self.0) - } +pub trait Parse { + fn parse(&mut self, path: &str, src: &[u8], dst: &mut Vec) -> Result<(), Error>; } pub struct Parser<'a> { @@ -29,8 +34,8 @@ impl<'a> Parser<'a> { Parser { steps: Vec::new() } } - pub fn push>(&mut self, parser: P) { - self.steps.push(parser.into()); + pub fn push(&mut self, parser: &'a mut P) { + self.steps.push(parser.as_parse_mut()); } }