Skip to content

Commit c1e8554

Browse files
committed
Have iter_from/iter_dup_from return a Result
It previously called unwrap() which panics if a key isn't found
1 parent 23e33cc commit c1e8554

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

src/cursor.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ pub trait Cursor<'txn> {
6161
/// For databases with duplicate data items (`DatabaseFlags::DUP_SORT`), the
6262
/// duplicate data items of each key will be returned before moving on to
6363
/// the next key.
64-
fn iter_from<K>(&mut self, key: K) -> Iter<'txn> where K: AsRef<[u8]> {
65-
self.get(Some(key.as_ref()), None, ffi::MDB_SET_RANGE).unwrap();
66-
Iter::new(self.cursor(), ffi::MDB_GET_CURRENT, ffi::MDB_NEXT)
64+
fn iter_from<K>(&mut self, key: K) -> Result<Iter<'txn>> where K: AsRef<[u8]> {
65+
try!(self.get(Some(key.as_ref()), None, ffi::MDB_SET_RANGE));
66+
Ok(Iter::new(self.cursor(), ffi::MDB_GET_CURRENT, ffi::MDB_NEXT))
6767
}
6868

6969
/// Iterate over duplicate database items. The iterator will begin with the
@@ -83,8 +83,8 @@ pub trait Cursor<'txn> {
8383
/// Iterate over duplicate items in the database starting from the given
8484
/// key. Each item will be returned as an iterator of its duplicates.
8585
fn iter_dup_from<K>(&mut self, key: &K) -> IterDup<'txn> where K: AsRef<[u8]> {
86-
self.get(Some(key.as_ref()), None, ffi::MDB_SET_RANGE).unwrap();
87-
IterDup::new(self.cursor(), ffi::MDB_GET_CURRENT)
86+
try!(self.get(Some(key.as_ref()), None, ffi::MDB_SET_RANGE));
87+
Ok(IterDup::new(self.cursor(), ffi::MDB_GET_CURRENT))
8888
}
8989

9090
/// Iterate over the duplicates of the item in the database with the given
@@ -419,7 +419,7 @@ mod test {
419419
assert_eq!(items, cursor.iter_start().collect::<Vec<_>>());
420420

421421
assert_eq!(items.clone().into_iter().skip(1).collect::<Vec<_>>(),
422-
cursor.iter_from(b"key2").collect::<Vec<_>>());
422+
cursor.iter_from(b"key2").unwrap().collect::<Vec<_>>());
423423
}
424424

425425
#[test]
@@ -458,7 +458,7 @@ mod test {
458458
cursor.iter_dup_start().flat_map(|x| x).collect::<Vec<(&[u8], &[u8])>>());
459459

460460
assert_eq!(items.clone().into_iter().skip(3).collect::<Vec<(&[u8], &[u8])>>(),
461-
cursor.iter_dup_from(b"b").flat_map(|x| x).collect::<Vec<_>>());
461+
cursor.iter_dup_from(b"b").unwrap().flat_map(|x| x).collect::<Vec<_>>());
462462

463463
assert_eq!(items.clone().into_iter().skip(3).collect::<Vec<(&[u8], &[u8])>>(),
464464
cursor.iter_dup_from(b"ab").flat_map(|x| x).collect::<Vec<_>>());

0 commit comments

Comments
 (0)