From 869e16d1d2ded035dd776b4d4a53ce846b76a2ef Mon Sep 17 00:00:00 2001 From: Tony Arcieri Date: Sun, 10 Jul 2016 15:27:22 -0700 Subject: [PATCH] Have iter_from/iter_dup_from return a Result It previously called unwrap() which panics if a key isn't found --- src/cursor.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/cursor.rs b/src/cursor.rs index 1ea2385..c634791 100644 --- a/src/cursor.rs +++ b/src/cursor.rs @@ -61,9 +61,9 @@ pub trait Cursor<'txn> { /// For databases with duplicate data items (`DatabaseFlags::DUP_SORT`), the /// duplicate data items of each key will be returned before moving on to /// the next key. - fn iter_from(&mut self, key: K) -> Iter<'txn> where K: AsRef<[u8]> { - self.get(Some(key.as_ref()), None, ffi::MDB_SET_RANGE).unwrap(); - Iter::new(self.cursor(), ffi::MDB_GET_CURRENT, ffi::MDB_NEXT) + fn iter_from(&mut self, key: K) -> Result> where K: AsRef<[u8]> { + try!(self.get(Some(key.as_ref()), None, ffi::MDB_SET_RANGE)); + Ok(Iter::new(self.cursor(), ffi::MDB_GET_CURRENT, ffi::MDB_NEXT)) } /// Iterate over duplicate database items. The iterator will begin with the @@ -82,9 +82,9 @@ pub trait Cursor<'txn> { /// Iterate over duplicate items in the database starting from the given /// key. Each item will be returned as an iterator of its duplicates. - fn iter_dup_from(&mut self, key: &K) -> IterDup<'txn> where K: AsRef<[u8]> { - self.get(Some(key.as_ref()), None, ffi::MDB_SET_RANGE).unwrap(); - IterDup::new(self.cursor(), ffi::MDB_GET_CURRENT) + fn iter_dup_from(&mut self, key: &K) -> Result> where K: AsRef<[u8]> { + try!(self.get(Some(key.as_ref()), None, ffi::MDB_SET_RANGE)); + Ok(IterDup::new(self.cursor(), ffi::MDB_GET_CURRENT)) } /// Iterate over the duplicates of the item in the database with the given @@ -445,7 +445,7 @@ mod test { assert_eq!(items, cursor.iter_start().collect::>()); assert_eq!(items.clone().into_iter().skip(1).collect::>(), - cursor.iter_from(b"key2").collect::>()); + cursor.iter_from(b"key2").unwrap().collect::>()); } #[test] @@ -484,10 +484,10 @@ mod test { cursor.iter_dup_start().flat_map(|x| x).collect::>()); assert_eq!(items.clone().into_iter().skip(3).collect::>(), - cursor.iter_dup_from(b"b").flat_map(|x| x).collect::>()); + cursor.iter_dup_from(b"b").unwrap().flat_map(|x| x).collect::>()); assert_eq!(items.clone().into_iter().skip(3).collect::>(), - cursor.iter_dup_from(b"ab").flat_map(|x| x).collect::>()); + cursor.iter_dup_from(b"ab").unwrap().flat_map(|x| x).collect::>()); assert_eq!(items.clone().into_iter().skip(3).take(3).collect::>(), cursor.iter_dup_of(b"b").unwrap().collect::>());