Mercurial > lbo > hg > leveldb-rs
changeset 108:cb744c4fbd54
Use try!() with read_length_prefixed() so the correct error is returned
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sun, 09 Oct 2016 16:34:38 +0200 |
parents | 47722b02b4d5 |
children | 0b7271ebf175 |
files | src/version_edit.rs |
diffstat | 1 files changed, 22 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/src/version_edit.rs Sun Oct 09 16:34:16 2016 +0200 +++ b/src/version_edit.rs Sun Oct 09 16:34:38 2016 +0200 @@ -126,7 +126,8 @@ let mut buf = Vec::with_capacity(256); if let Some(ref cmp) = self.comparator { - buf.write_varint(EditTag::Comparator as u32).is_ok(); // swallow errors, because it's a pure in-memory write + // swallow errors, because it's a pure in-memory write + buf.write_varint(EditTag::Comparator as u32).is_ok(); // data is prefixed by a varint32 describing the length of the following chunk buf.write_varint(cmp.len()).is_ok(); buf.write(cmp.as_bytes()).is_ok(); @@ -188,16 +189,11 @@ if let Some(tag) = tag_to_enum(tag) { match tag { EditTag::Comparator => { - if let Ok(buf) = read_length_prefixed(&mut reader) { - if let Ok(c) = String::from_utf8(buf) { - ve.comparator = Some(c); - } else { - return Err(Status::Corruption("Bad comparator encoding" - .to_string())); - } + let buf = try!(read_length_prefixed(&mut reader)); + if let Ok(c) = String::from_utf8(buf) { + ve.comparator = Some(c); } else { - return Err(Status::IOError("Couldn't read comparator name" - .to_string())); + return Err(Status::Corruption("Bad comparator encoding".to_string())); } } @@ -229,14 +225,12 @@ EditTag::CompactPointer => { // Monads by indentation... if let Ok(lvl) = reader.read_varint() { - if let Ok(key) = read_length_prefixed(&mut reader) { - ve.compaction_ptrs.push(CompactionPointer { - level: lvl, - key: key, - }); - } else { - return Err(Status::IOError("Couldn't read key".to_string())); - } + let key = try!(read_length_prefixed(&mut reader)); + + ve.compaction_ptrs.push(CompactionPointer { + level: lvl, + key: key, + }); } else { return Err(Status::IOError("Couldn't read level".to_string())); } @@ -258,22 +252,16 @@ if let Ok(lvl) = reader.read_varint() { if let Ok(num) = reader.read_varint() { if let Ok(size) = reader.read_varint() { - if let (Ok(smallest), Ok(largest)) = - (read_length_prefixed(&mut reader), - read_length_prefixed(&mut reader)) { - ve.new_files.push((lvl, - FileMetaData { - num: num, - size: size, - smallest: smallest, - largest: largest, - allowed_seeks: 0, - })) - } else { - return Err(Status::IOError("Couldn't read \ - smallest/largest keys" - .to_string())); - } + let smallest = try!(read_length_prefixed(&mut reader)); + let largest = try!(read_length_prefixed(&mut reader)); + ve.new_files.push((lvl, + FileMetaData { + num: num, + size: size, + smallest: smallest, + largest: largest, + allowed_seeks: 0, + })) } else { return Err(Status::IOError("Couldn't read file size" .to_string()));