1pub mod adapter;
19pub mod error;
20
21#[cfg(test)]
22pub mod tester;
23
24pub use error::Error;
25use std::fmt::Debug;
26
27pub trait Toboggan: Clone {
28 type Tree: self::Tree;
29 fn open_tree<V: AsRef<[u8]>>(&self, name: V) -> Result<Self::Tree, Error>;
30}
31pub trait MergeOperator: Fn(&[u8], Option<&[u8]>, &[u8]) -> Option<Vec<u8>> {}
32impl<F> MergeOperator for F where F: Fn(&[u8], Option<&[u8]>, &[u8]) -> Option<Vec<u8>> {}
33
34pub trait Tree {
35 type OutValue: AsRef<[u8]>
36 + std::borrow::Borrow<[u8]>
37 + PartialEq<Vec<u8>>
38 + std::ops::Deref<Target = [u8]>
39 + Debug;
40 type Iter: Iterator<Item = Result<(Self::OutValue, Self::OutValue), Error>>;
41
42 fn insert<K: AsRef<[u8]> + Into<Vec<u8>>, V: AsRef<[u8]>>(
43 &self,
44 key: K,
45 value: V,
46 ) -> Result<(), Error>;
47 fn set_merge_operator(&self, merge_operator: impl MergeOperator + 'static);
48 fn merge<K: AsRef<[u8]>, V: AsRef<[u8]>>(&self, key: K, value: V) -> Result<(), Error>;
49 fn get<K: AsRef<[u8]>>(&self, key: K) -> Result<Option<Self::OutValue>, Error>;
50 fn iter(&self) -> Self::Iter;
51 fn flush(&self) -> Result<(), Error>;
52 fn clear(&self) -> Result<(), Error>;
53}