aboutsummaryrefslogtreecommitdiff
path: root/src/format/binary.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/format/binary.rs')
-rw-r--r--src/format/binary.rs33
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 }
+ }
+}