use crate::async_runtime::{BoxFuture, BoxStream, MaybeSend};
use crate::error::Result;
use crate::types::{Key, Value};
pub trait AsyncKVStore: MaybeSend {
type Transaction<'a>: AsyncKVTransaction<'a>
where
Self: 'a;
fn begin_async<'a>(&'a self) -> BoxFuture<'a, Result<Self::Transaction<'a>>>;
}
pub trait AsyncKVTransaction<'txn>: MaybeSend {
fn async_get<'a>(&'a self, key: &'a [u8]) -> BoxFuture<'a, Result<Option<Value>>>;
fn async_put<'a>(&'a mut self, key: &'a [u8], value: &'a [u8]) -> BoxFuture<'a, Result<()>>;
fn async_delete<'a>(&'a mut self, key: &'a [u8]) -> BoxFuture<'a, Result<()>>;
fn async_scan_prefix<'a>(&'a self, prefix: &'a [u8]) -> BoxStream<'a, Result<(Key, Value)>>;
fn async_commit(self) -> BoxFuture<'txn, Result<()>>;
fn async_rollback(self) -> BoxFuture<'txn, Result<()>>;
}