Skip to content

Commit

Permalink
feat(wallet)!: Add persister parameters
Browse files Browse the repository at this point in the history
This introduces a `WalletPersisterCommon` trait that provides common
type parameters (`::Error` and `::Params`) for `WalletPersister` and
`AsyncWalletPersister`.

Methods/functions that construct `PersistedWallet` now take in an extra
`::Params` input.

This allows more flexible configurations for persister implementations.
  • Loading branch information
evanlinjin committed Aug 21, 2024
1 parent 94ea1fe commit bcdbe0f
Show file tree
Hide file tree
Showing 9 changed files with 112 additions and 68 deletions.
4 changes: 2 additions & 2 deletions crates/wallet/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,13 +83,13 @@ let wallet_opt = Wallet::load()
.descriptor(KeychainKind::Internal, Some(change_descriptor))
.extract_keys()
.check_network(network)
.load_wallet(&mut db)
.load_wallet(&mut db, ())
.expect("wallet");
let mut wallet = match wallet_opt {
Some(wallet) => wallet,
None => Wallet::create(descriptor, change_descriptor)
.network(network)
.create_wallet(&mut db)
.create_wallet(&mut db, ())
.expect("wallet"),
};
Expand Down
8 changes: 4 additions & 4 deletions crates/wallet/src/wallet/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@ impl Wallet {
/// let mut conn = Connection::open(file_path)?;
/// let wallet = Wallet::create_single(EXTERNAL_DESC)
/// .network(Network::Testnet)
/// .create_wallet(&mut conn)?;
/// .create_wallet(&mut conn, ())?;
/// # Ok::<_, anyhow::Error>(())
/// ```
/// [`change_policy`]: TxBuilder::change_policy
Expand Down Expand Up @@ -363,7 +363,7 @@ impl Wallet {
/// let mut conn = Connection::open(file_path)?;
/// let wallet = Wallet::create(EXTERNAL_DESC, INTERNAL_DESC)
/// .network(Network::Testnet)
/// .create_wallet(&mut conn)?;
/// .create_wallet(&mut conn, ())?;
/// # Ok(())
/// # }
/// ```
Expand Down Expand Up @@ -476,7 +476,7 @@ impl Wallet {
/// .check_genesis_hash(genesis_hash)
/// // set a lookahead for our indexer
/// .lookahead(101)
/// .load_wallet(&mut conn)?
/// .load_wallet(&mut conn, ())?
/// .expect("must have data to load wallet");
/// # Ok(())
/// # }
Expand Down Expand Up @@ -672,7 +672,7 @@ impl Wallet {
/// use bdk_chain::rusqlite::Connection;
/// let mut conn = Connection::open_in_memory().expect("must open connection");
/// let mut wallet = LoadParams::new()
/// .load_wallet(&mut conn)
/// .load_wallet(&mut conn, ())
/// .expect("database is okay")
/// .expect("database has data");
/// let next_address = wallet.reveal_next_address(KeychainKind::External);
Expand Down
12 changes: 8 additions & 4 deletions crates/wallet/src/wallet/params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,22 +117,24 @@ impl CreateParams {
pub fn create_wallet<P>(
self,
persister: &mut P,
persister_params: P::Params,
) -> Result<PersistedWallet<P>, CreateWithPersistError<P::Error>>
where
P: WalletPersister,
{
PersistedWallet::create(persister, self)
PersistedWallet::create(persister, persister_params, self)
}

/// Create [`PersistedWallet`] with the given [`AsyncWalletPersister`].
pub async fn create_wallet_async<P>(
self,
persister: &mut P,
persister_params: P::Params,
) -> Result<PersistedWallet<P>, CreateWithPersistError<P::Error>>
where
P: AsyncWalletPersister,
{
PersistedWallet::create_async(persister, self).await
PersistedWallet::create_async(persister, persister_params, self).await
}

/// Create [`Wallet`] without persistence.
Expand Down Expand Up @@ -228,22 +230,24 @@ impl LoadParams {
pub fn load_wallet<P>(
self,
persister: &mut P,
persister_params: P::Params,
) -> Result<Option<PersistedWallet<P>>, LoadWithPersistError<P::Error>>
where
P: WalletPersister,
{
PersistedWallet::load(persister, self)
PersistedWallet::load(persister, persister_params, self)
}

/// Load [`PersistedWallet`] with the given [`AsyncWalletPersister`].
pub async fn load_wallet_async<P>(
self,
persister: &mut P,
persister_params: P::Params,
) -> Result<Option<PersistedWallet<P>>, LoadWithPersistError<P::Error>>
where
P: AsyncWalletPersister,
{
PersistedWallet::load_async(persister, self).await
PersistedWallet::load_async(persister, persister_params, self).await
}

/// Load [`Wallet`] without persistence.
Expand Down
Loading

0 comments on commit bcdbe0f

Please sign in to comment.