use super::types::{CompactionResult, StorageStats, WriteBatch};
use super::Result;
pub trait StorageEngine: Send + Sync {
fn get(&self, key: &[u8]) -> Result<Option<Vec<u8>>>;
fn insert(&self, key: &[u8], value: &[u8]) -> Result<()>;
fn delete(&self, key: &[u8]) -> Result<()>;
fn contains_key(&self, key: &[u8]) -> Result<bool>;
fn range(&self, start: &[u8], end: &[u8]) -> Result<Vec<(Vec<u8>, Vec<u8>)>>;
fn scan_prefix(&self, prefix: &[u8]) -> Result<Vec<(Vec<u8>, Vec<u8>)>>;
fn write_batch(&self, batch: &WriteBatch) -> Result<()>;
fn flush(&self) -> Result<()>;
fn compact(&self) -> Result<CompactionResult>;
fn stats(&self) -> Result<StorageStats>;
}
pub trait KvIterator: Iterator<Item = Result<(Vec<u8>, Vec<u8>)>> {
fn peek_key(&self) -> Option<&[u8]>;
fn seek(&mut self, key: &[u8]) -> Result<()>;
fn valid(&self) -> bool;
}