Skip to content

Commit 180df23

Browse files
committed
ref(persister): collapse wallet subdir to persister
- move wallet subdir into the persister module to simplify the structure as wallet was confusing
1 parent 345adc9 commit 180df23

2 files changed

Lines changed: 49 additions & 44 deletions

File tree

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,57 @@
1+
#[cfg(any(feature = "sqlite", feature = "redb"))]
12
use crate::commands::WalletOpts;
23
use crate::error::BDKCliError as Error;
3-
use bdk_wallet::Wallet;
4-
use bdk_wallet::bitcoin::Network;
54
#[cfg(any(feature = "sqlite", feature = "redb"))]
6-
use bdk_wallet::{KeychainKind, PersistedWallet, WalletPersister};
5+
use bdk_wallet::{KeychainKind, PersistedWallet, bitcoin::Network};
6+
use bdk_wallet::{Wallet, WalletPersister};
7+
use clap::ValueEnum;
8+
9+
#[derive(Clone, ValueEnum, Debug, Eq, PartialEq)]
10+
pub enum DatabaseType {
11+
/// Sqlite database
12+
#[cfg(feature = "sqlite")]
13+
Sqlite,
14+
/// Redb database
15+
#[cfg(feature = "redb")]
16+
Redb,
17+
}
718

19+
// Types of Persistence backends supported by bdk-cli
820
#[cfg(any(feature = "sqlite", feature = "redb"))]
9-
pub mod persister;
21+
pub(crate) enum Persister {
22+
#[cfg(feature = "sqlite")]
23+
Connection(bdk_wallet::rusqlite::Connection),
24+
#[cfg(feature = "redb")]
25+
RedbStore(bdk_redb::Store),
26+
}
27+
28+
impl WalletPersister for Persister {
29+
type Error = Error;
30+
31+
fn initialize(persister: &mut Self) -> Result<bdk_wallet::ChangeSet, Self::Error> {
32+
match persister {
33+
#[cfg(feature = "sqlite")]
34+
Persister::Connection(connection) => {
35+
WalletPersister::initialize(connection).map_err(Error::from)
36+
}
37+
#[cfg(feature = "redb")]
38+
Persister::RedbStore(store) => WalletPersister::initialize(store).map_err(Error::from),
39+
}
40+
}
41+
42+
fn persist(persister: &mut Self, changeset: &bdk_wallet::ChangeSet) -> Result<(), Self::Error> {
43+
match persister {
44+
#[cfg(feature = "sqlite")]
45+
Persister::Connection(connection) => {
46+
WalletPersister::persist(connection, changeset).map_err(Error::from)
47+
}
48+
#[cfg(feature = "redb")]
49+
Persister::RedbStore(store) => {
50+
WalletPersister::persist(store, changeset).map_err(Error::from)
51+
}
52+
}
53+
}
54+
}
1055

1156
#[cfg(any(feature = "sqlite", feature = "redb"))]
1257
pub(crate) fn new_persisted_wallet<P: WalletPersister>(

src/wallet/persister.rs

Lines changed: 0 additions & 40 deletions
This file was deleted.

0 commit comments

Comments
 (0)