Abstract database behind generic interface and implement alternative drivers #322
2 changed files with 6 additions and 5 deletions
|
@ -35,10 +35,11 @@ pub struct Error(pub Cow<'static, str>);
|
||||||
|
|
||||||
pub type Result<T> = std::result::Result<T, Error>;
|
pub type Result<T> = std::result::Result<T, Error>;
|
||||||
|
|
||||||
|
#[derive(Debug, Error)]
|
||||||
|
#[error(display = "{}", _0)]
|
||||||
pub struct TxOpError(pub(crate) Error);
|
pub struct TxOpError(pub(crate) Error);
|
||||||
pub type TxOpResult<T> = std::result::Result<T, TxOpError>;
|
pub type TxOpResult<T> = std::result::Result<T, TxOpError>;
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub enum TxError<E> {
|
pub enum TxError<E> {
|
||||||
Abort(E),
|
Abort(E),
|
||||||
Db(Error),
|
Db(Error),
|
||||||
|
|
|
@ -203,12 +203,12 @@ impl IDb for LmdbDb {
|
||||||
|
|
||||||
// ----
|
// ----
|
||||||
|
|
||||||
struct LmdbTx<'a, 'db> {
|
struct LmdbTx<'a> {
|
||||||
trees: &'db [Database],
|
trees: &'a [Database],
|
||||||
tx: RwTxn<'a, 'a>,
|
tx: RwTxn<'a, 'a>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'db> LmdbTx<'a, 'db> {
|
impl<'a> LmdbTx<'a> {
|
||||||
fn get_tree(&self, i: usize) -> TxOpResult<&Database> {
|
fn get_tree(&self, i: usize) -> TxOpResult<&Database> {
|
||||||
self.trees.get(i).ok_or_else(|| {
|
self.trees.get(i).ok_or_else(|| {
|
||||||
TxOpError(Error(
|
TxOpError(Error(
|
||||||
|
@ -218,7 +218,7 @@ impl<'a, 'db> LmdbTx<'a, 'db> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'db> ITx for LmdbTx<'a, 'db> {
|
impl<'a> ITx for LmdbTx<'a> {
|
||||||
fn get(&self, tree: usize, key: &[u8]) -> TxOpResult<Option<Value>> {
|
fn get(&self, tree: usize, key: &[u8]) -> TxOpResult<Option<Value>> {
|
||||||
let tree = self.get_tree(tree)?;
|
let tree = self.get_tree(tree)?;
|
||||||
match tree.get(&self.tx, key)? {
|
match tree.get(&self.tx, key)? {
|
||||||
|
|
Loading…
Reference in a new issue