diff options
Diffstat (limited to 'src/format')
-rw-r--r-- | src/format/energymech.rs | 15 | ||||
-rw-r--r-- | src/format/mod.rs | 47 | ||||
-rw-r--r-- | src/format/weechat3.rs | 15 |
3 files changed, 35 insertions, 42 deletions
diff --git a/src/format/energymech.rs b/src/format/energymech.rs index df48318..5965dfa 100644 --- a/src/format/energymech.rs +++ b/src/format/energymech.rs @@ -28,13 +28,13 @@ pub struct Energymech; static TIME_FORMAT: &'static str = "%H:%M:%S"; -pub struct Iter<'a, R: 'a> where R: BufRead { +pub struct Iter<'a> { context: &'a Context, - input: R, + input: &'a mut BufRead, buffer: Vec<u8> } -impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { +impl<'a> Iterator for Iter<'a> { type Item = ::Result<Event<'a>>; fn next(&mut self) -> Option<::Result<Event<'a>>> { fn parse_time(context: &Context, time: &str) -> Time { @@ -153,14 +153,13 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { } } -impl<'a, R: 'a> Decode<'a, R> for Energymech where R: BufRead { - type Output = Iter<'a, R>; - fn decode(&'a mut self, context: &'a Context, input: R) -> Iter<R> { - Iter { +impl<'a> Decode<'a> for Energymech { + fn decode(&'a mut self, context: &'a Context, input: &'a mut BufRead) -> Box<Iterator<Item = ::Result<Event<'a>>> + 'a> { + Box::new(Iter { context: context, input: input, buffer: Vec::new() - } + }) } } diff --git a/src/format/mod.rs b/src/format/mod.rs index f918287..4f8eaa1 100644 --- a/src/format/mod.rs +++ b/src/format/mod.rs @@ -16,55 +16,50 @@ //! As the source format may not provide the same information as the //! target format, all formats must allow for omittable information. +use std::iter; use std::io::{ BufRead, Write }; use std::borrow::Cow; use event::Event; use context::Context; -pub mod weechat3; -pub mod energymech; -pub mod binary; -pub mod msgpack; +//pub mod weechat3; +//pub mod energymech; +//pub mod binary; +//pub mod msgpack; 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, Input> where Input: BufRead, - Self::Output: Iterator<Item = ::Result<Event<'a>>> + 'a { - type Output; - fn decode(&'a mut self, context: &'a Context, input: Input) -> Self::Output; +pub trait Decode<'a, 'b, 'c> { + fn decode(&'a mut self, context: &'b Context, input: &'c mut BufRead) -> Box<Iterator<Item = ::Result<Event<'a>>> + 'a>; } -pub trait DecodeBox<'a, I> { - fn decode_box(&'a mut self, context: &'a Context, input: I) - -> Box<Iterator<Item = ::Result<Event>> + 'a>; -} +pub struct Dummy; -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<Iterator<Item = ::Result<Event>> + 'a> { - Box::new(self.decode(context, input)) +impl <'a, 'b, 'c> Decode<'a, 'b, 'c> for Dummy { + fn decode(&'a mut self, _context: &'b Context, _input: &'c mut BufRead) -> Box<Iterator<Item = ::Result<Event<'a>>> + 'a> { + Box::new(iter::empty()) } } -pub fn decoder<'a>(format: &str) -> Option<Box<DecodeBox<'a, &'a mut BufRead>>> { +pub fn decoder<'a, 'b, 'c>(format: &str) -> Option<Box<Decode<'a, 'b, 'c>>> { match format { - "energymech" => Some(Box::new(energymech::Energymech)), - "weechat3" => Some(Box::new(weechat3::Weechat3)), - "binary" => Some(Box::new(binary::Binary)), - "msgpack" => Some(Box::new(msgpack::Msgpack)), +// "energymech" => Some(Box::new(energymech::Energymech)), +// "weechat3" => Some(Box::new(weechat3::Weechat3)), +// "binary" => Some(Box::new(binary::Binary)), +// "msgpack" => Some(Box::new(msgpack::Msgpack)), _ => None } } -pub fn encoder<'a>(format: &str) -> Option<Box<Encode<'a, &'a mut Write>>> { +pub fn encoder<'a, 'b: 'a>(format: &str) -> Option<Box<Encode<'a, &'b mut Write>>> { match format { - "energymech" => Some(Box::new(energymech::Energymech)), - "weechat3" => Some(Box::new(weechat3::Weechat3)), - "binary" => Some(Box::new(binary::Binary)), - "msgpack" => Some(Box::new(msgpack::Msgpack)), +// "energymech" => Some(Box::new(energymech::Energymech)), +// "weechat3" => Some(Box::new(weechat3::Weechat3)), +// "binary" => Some(Box::new(binary::Binary)), +// "msgpack" => Some(Box::new(msgpack::Msgpack)), _ => None } } diff --git a/src/format/weechat3.rs b/src/format/weechat3.rs index e733a38..118bd3b 100644 --- a/src/format/weechat3.rs +++ b/src/format/weechat3.rs @@ -26,13 +26,13 @@ pub struct Weechat3; static TIME_DATE_FORMAT: &'static str = "%Y-%m-%d %H:%M:%S"; -pub struct Iter<'a, R: 'a> where R: BufRead { +pub struct Iter<'a> { context: &'a Context, - input: R, + input: &'a mut BufRead, buffer: Vec<u8> } -impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { +impl<'a> Iterator for Iter<'a> { type Item = ::Result<Event<'a>>; fn next(&mut self) -> Option<::Result<Event<'a>>> { fn parse_time(c: &Context, date: &str, time: &str) -> Time { @@ -139,14 +139,13 @@ impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead { } } -impl<'a, I: 'a> Decode<'a, I> for Weechat3 where I: BufRead { - type Output = Iter<'a, I>; - fn decode(&'a mut self, context: &'a Context, input: I) -> Iter<'a, I> { - Iter { +impl<'a> Decode<'a> for Weechat3 { + fn decode(&'a mut self, context: &'a Context, input: &'a mut BufRead) -> Box<Iterator<Item = ::Result<Event<'a>>> + 'a> { + Box::new(Iter { context: context, input: input, buffer: Vec::new() - } + }) } } |