sodium_rust/impl_/
transaction.rs1use 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 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}