core_crypto_keystore/
transactionlike.rs1use std::ops::Deref;
2
3use rusqlite::Connection;
4
5use crate::{CryptoKeystoreResult, transaction::TransactionConnection};
6
7#[derive(derive_more::From)]
9pub(crate) enum ConnectionGuard<'a> {
10 Rusqlite(&'a rusqlite::Transaction<'a>),
11 Keystore(TransactionConnection),
12}
13
14impl<'a> Deref for ConnectionGuard<'a> {
15 type Target = Connection;
16
17 fn deref(&self) -> &Self::Target {
18 match self {
19 ConnectionGuard::Rusqlite(transaction) => (*transaction).deref(),
20 ConnectionGuard::Keystore(transaction_connection) => transaction_connection.deref(),
21 }
22 }
23}
24
25#[derive(derive_more::From)]
36pub enum Transactionlike<'a> {
37 Rusqlite(&'a rusqlite::Transaction<'a>),
38 Keystore(&'a crate::Transaction),
39}
40
41impl<'a> Transactionlike<'a> {
42 pub(crate) fn conn(&self) -> CryptoKeystoreResult<ConnectionGuard<'a>> {
43 let guard = match self {
44 Transactionlike::Rusqlite(transaction) => (*transaction).into(),
45 Transactionlike::Keystore(transaction) => transaction.conn()?.into(),
46 };
47 Ok(guard)
48 }
49}