Mercurial > lbo > hg > localmr
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];