use std::io::{Read, Write};
use uuid::Uuid;
#[cfg(feature = "directory")]
pub use directory::*;
pub use error::*;
pub use memory::*;
#[cfg(feature = "directory")]
mod directory;
mod error;
mod memory;
pub trait Storage {
type Read: Read;
type Write: Write;
type Iterator: Iterator<Item=Result<Uuid>>;
fn new(&mut self) -> Result<(Uuid, Self::Write)>;
fn read(&self, entry: Uuid) -> Result<Self::Read>;
fn write(&mut self, entry: Uuid) -> Result<Self::Write>;
fn overwrite(&mut self, entry: Uuid) -> Result<Self::Write>;
fn delete(&mut self, entry: Uuid) -> Result<bool>;
fn clear(&mut self) -> Result<()>;
fn iter(&self) -> Result<Self::Iterator>;
}