From 96013802eb8cb8da86b5f6398e88375203cd5e28 Mon Sep 17 00:00:00 2001 From: Till Hoeppner Date: Thu, 23 Jul 2015 22:57:43 +0200 Subject: Support dynamic selection of decoders/encoders --- src/format/mod.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src/format/mod.rs') diff --git a/src/format/mod.rs b/src/format/mod.rs index db86a1d..2a36b34 100644 --- a/src/format/mod.rs +++ b/src/format/mod.rs @@ -30,8 +30,22 @@ pub trait Encode<'a, W> where W: Write { fn encode(&'a self, context: &'a Context, output: W, event: &'a Event) -> ::Result<()>; } -pub trait Decode<'a, R, O> where R: BufRead, O: Iterator>> { - fn decode(&'a mut self, context: &'a Context, input: R) -> O; +pub trait Decode<'a, Input> where Input: BufRead, + Self::Output: Iterator>> + 'a { + type Output; + fn decode(&'a mut self, context: &'a Context, input: Input) -> Self::Output; +} + +pub trait DecodeBox<'a, I> { + fn decode_box(&'a mut self, context: &'a Context, input: I) + -> Box> + 'a>; +} + +impl<'a, T, I: BufRead> DecodeBox<'a, I> for T where T: Decode<'a, I> { + fn decode_box(&'a mut self, context: &'a Context, input: I) + -> Box> + 'a> { + Box::new(self.decode(context, input)) + } } fn rejoin(s: &[&str], splits: &[char]) -> Cow<'static, str> { -- cgit v1.2.3