use std::ops::Range;
use crate::{StorageError, ID};
pub type Item = Vec<u8>;
pub type ItemIterator<'s> = Box<dyn DoubleEndedIterator<Item = Result<Item, StorageError>> + 's>;
pub trait Storage: Send + Sync {
fn range(&self, r: Range<&[u8]>) -> Result<ItemIterator<'_>, StorageError>;
fn insert(&self, is: &[Item]) -> Result<(), StorageError>;
fn id(&self) -> ID;
}
impl<S: Storage + ?Sized> Storage for Box<S> {
fn range(&self, r: Range<&[u8]>) -> Result<ItemIterator<'_>, StorageError> {
(**self).range(r)
}
fn insert(&self, is: &[Item]) -> Result<(), StorageError> {
(**self).insert(is)
}
fn id(&self) -> ID {
(**self).id()
}
}