1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//! Implementation of `trait TxRo/TxRw` for `heed`.

use std::cell::RefCell;

//---------------------------------------------------------------------------------------------------- Import
use crate::{
    error::RuntimeError,
    transaction::{TxRo, TxRw},
};

//---------------------------------------------------------------------------------------------------- TxRo
impl TxRo<'_> for heed::RoTxn<'_> {
    fn commit(self) -> Result<(), RuntimeError> {
        Ok(heed::RoTxn::commit(self)?)
    }
}

//---------------------------------------------------------------------------------------------------- TxRw
impl TxRo<'_> for RefCell<heed::RwTxn<'_>> {
    fn commit(self) -> Result<(), RuntimeError> {
        TxRw::commit(self)
    }
}

impl TxRw<'_> for RefCell<heed::RwTxn<'_>> {
    fn commit(self) -> Result<(), RuntimeError> {
        Ok(heed::RwTxn::commit(self.into_inner())?)
    }

    /// This function is infallible.
    fn abort(self) -> Result<(), RuntimeError> {
        heed::RwTxn::abort(self.into_inner());
        Ok(())
    }
}

//---------------------------------------------------------------------------------------------------- Tests
#[cfg(test)]
mod test {
    // use super::*;
}