refactor: error handling (#41)
This commit is contained in:
@@ -46,11 +46,15 @@ impl StorageIterator for LsmIterator {
|
|||||||
/// `is_valid` should return false, and `next` should always return an error.
|
/// `is_valid` should return false, and `next` should always return an error.
|
||||||
pub struct FusedIterator<I: StorageIterator> {
|
pub struct FusedIterator<I: StorageIterator> {
|
||||||
iter: I,
|
iter: I,
|
||||||
|
has_errored: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<I: StorageIterator> FusedIterator<I> {
|
impl<I: StorageIterator> FusedIterator<I> {
|
||||||
pub fn new(iter: I) -> Self {
|
pub fn new(iter: I) -> Self {
|
||||||
Self { iter }
|
Self {
|
||||||
|
iter,
|
||||||
|
has_errored: false,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -106,14 +106,14 @@ impl<I: StorageIterator> StorageIterator for FusedIterator<I> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn key(&self) -> Self::KeyType<'_> {
|
fn key(&self) -> Self::KeyType<'_> {
|
||||||
if self.has_errored || !self.iter.is_valid() {
|
if !self.is_valid() {
|
||||||
panic!("invalid access to the underlying iterator");
|
panic!("invalid access to the underlying iterator");
|
||||||
}
|
}
|
||||||
self.iter.key()
|
self.iter.key()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn value(&self) -> &[u8] {
|
fn value(&self) -> &[u8] {
|
||||||
if self.has_errored || !self.iter.is_valid() {
|
if !self.is_valid() {
|
||||||
panic!("invalid access to the underlying iterator");
|
panic!("invalid access to the underlying iterator");
|
||||||
}
|
}
|
||||||
self.iter.value()
|
self.iter.value()
|
||||||
|
|||||||
Reference in New Issue
Block a user