changeset 2:c79a03c07e57

[formats] Add Iterator implementation to WriteLogReader
author Lewin Bormann <lbo@spheniscida.de>
date Sat, 30 Jan 2016 17:02:02 +0000
parents 9e4aafb22d74
children 30ab78379fff
files src/formats/writelog.rs
diffstat 1 files changed, 33 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/formats/writelog.rs	Sat Jan 30 16:47:20 2016 +0000
+++ b/src/formats/writelog.rs	Sat Jan 30 17:02:02 2016 +0000
@@ -5,6 +5,7 @@
 use std::io;
 use std::fs;
 use std::vec;
+use std::string;
 
 /// A length-prefixed record stream named for the original use case,
 /// which was to write a log of all write operations to a database.
@@ -179,6 +180,38 @@
     }
 }
 
+impl Iterator for WriteLogReader {
+    type Item = String;
+    fn next(&mut self) -> Option<String> {
+        let result = self.read_vec();
+        let convert_result;
+
+        match result {
+            Err(_) => return None,
+            Ok(v) => convert_result = string::String::from_utf8(v)
+        }
+
+        match convert_result {
+            Err(_) => None,
+            Ok(s) => Some(s)
+        }
+    }
+}
+
+// Byte string implementation.
+/*
+impl Iterator for WriteLogReader {
+    type Item = vec::Vec<u8>;
+    fn next(&mut self) -> Option<vec::Vec<u8>> {
+        let result = self.read_vec();
+        match result {
+            Err(_) => None,
+            Ok(v) => Some(v)
+        }
+    }
+}
+*/
+
 impl Read for WriteLogReader {
     fn read(&mut self, dst: &mut [u8]) -> io::Result<usize> {
         let mut lengthbuf = [0; 4];