use bytes::Bytes;
pub trait StoreEngine: Send + Sync + 'static {
fn put_batch(&self, kvs: &[(Bytes, Bytes)]) -> Result<u64, String>;
fn get(&self, key: &[u8]) -> Result<Option<Vec<u8>>, String>;
fn range_scan(
&self,
start: &[u8],
end: &[u8],
limit: usize,
forward: bool,
) -> Result<Vec<(Bytes, Bytes)>, String>;
fn get_many(&self, keys: &[&[u8]]) -> Result<Vec<(Vec<u8>, Option<Vec<u8>>)>, String> {
keys.iter()
.map(|k| Ok((k.to_vec(), self.get(k)?)))
.collect()
}
fn delete_batch(&self, keys: &[&[u8]]) -> Result<u64, String>;
fn current_sequence(&self) -> u64;
fn get_batch(&self, sequence_number: u64) -> Result<Option<Vec<(Bytes, Bytes)>>, String>;
fn oldest_retained_batch(&self) -> Result<Option<u64>, String>;
fn prune_batch_log(&self, cutoff_exclusive: u64) -> Result<u64, String>;
}