pub trait Storage {
type Output: Output;
type Reader: Read;
type Group: Iterator<Item = Result<Entry>>;
type Sink: Iterator<Item = Result<SpatialSample>>;
// Required methods
fn create(&self) -> Self::Output;
fn open_raw(&self, hash: &Hash) -> Result<Self::Reader>;
fn open_group(&self, hash: &Hash) -> Result<Self::Group>;
fn open_sink(&self, hash: &Hash) -> Result<Self::Sink>;
}