sodium_rust/impl_/
transaction.rs

1use crate::impl_::sodium_ctx::SodiumCtx;
2
3pub struct Transaction {
4    sodium_ctx: SodiumCtx,
5    done: std::cell::Cell<bool>,
6}
7
8impl Transaction {
9    pub fn new(sodium_ctx: &SodiumCtx) -> Transaction {
10        sodium_ctx.enter_transaction();
11        Transaction {
12            sodium_ctx: sodium_ctx.clone(),
13            done: std::cell::Cell::new(false),
14        }
15    }
16
17    // optional earily close
18    pub fn close(&self) {
19        if !self.done.get() {
20            self.sodium_ctx.leave_transaction();
21            self.done.set(true);
22        }
23    }
24}
25
26impl Drop for Transaction {
27    fn drop(&mut self) {
28        self.close();
29    }
30}