diff options
Diffstat (limited to 'src/format/binary.rs')
-rw-r--r-- | src/format/binary.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/format/binary.rs b/src/format/binary.rs new file mode 100644 index 0000000..aae760c --- /dev/null +++ b/src/format/binary.rs @@ -0,0 +1,33 @@ +use std::io::{ self, BufRead, Write }; +use std::borrow::ToOwned; +use std::iter::{ Iterator }; + +use log::Event; +use format::{ Encode, Decode }; + +use bincode::{ self, SizeLimit }; + +pub struct Binary; + +pub struct Iter<R> where R: BufRead { + input: R, +} + +impl<R> Iterator for Iter<R> where R: BufRead { + type Item = ::Result<Event>; + fn next(&mut self) -> Option<::Result<Event>> { + Some(bincode::decode_from(&mut self.input, SizeLimit::Infinite).map_err(|_| ::IlcError::BincodeDecode)) + } +} + +impl<W> Encode<W> for Binary where W: Write { + fn encode(&self, mut output: W, event: &Event) -> ::Result<()> { + bincode::encode_into(event, &mut output, SizeLimit::Infinite).map_err(|_| ::IlcError::BincodeEncode) + } +} + +impl<R> Decode<R, Iter<R>> for Binary where R: BufRead { + fn decode(&mut self, input: R) -> Iter<R> { + Iter { input: input } + } +} |