use std::{ marker::PhantomData, }; pub use lmdb::{ Environment, DatabaseFlags, WriteFlags, EnvironmentFlags, Transaction, RoTransaction, RwTransaction, }; use rkyv::{ Fallible, Serialize, ser::serializers::AllocSerializer, }; mod raw; use raw::RawDB; mod typed; // re-exports pub use typed::{ DB, Cursor, Adapter, OutputBuffer, OutputWriter, }; mod hash; pub use hash::{ HashDB, Entry, }; mod fix; pub use fix::LMDBorrow; pub mod state; pub use state::{ StateDB, }; mod resources; pub use resources::{ ResourceDB, }; #[derive(Debug)] pub enum DBError { LMDB(lmdb::Error), RKYV( as Fallible>::Error), } impl From for DBError { fn from(e: lmdb::Error) -> Self { Self::LMDB(e) } } type Ser = AllocSerializer<1024>; #[derive(Clone)] struct AllocAdapter { phantom: PhantomData, } impl Fallible for AllocAdapter { type Error = DBError; } impl> Adapter for AllocAdapter { type Serializer = Ser; type Value = V; fn new_serializer() -> Self::Serializer { Self::Serializer::default() } fn from_ser_err(e: ::Error) -> Self::Error { DBError::RKYV(e) } fn from_db_err(e: lmdb::Error) -> Self::Error { e.into() } }