Skip to content

Commit a9c5f76

Browse files
committed
feat(wallet)!: remove dependency on bdk_chain::Staged
Introduce `Wallet::staged_mut` method.
1 parent 06a9d6c commit a9c5f76

File tree

2 files changed

+25
-23
lines changed

2 files changed

+25
-23
lines changed

crates/wallet/src/wallet/mod.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ use bitcoin::{
4545
use bitcoin::{consensus::encode::serialize, transaction, BlockHash, Psbt};
4646
use bitcoin::{constants::genesis_block, Amount};
4747
use bitcoin::{secp256k1::Secp256k1, Weight};
48-
use chain::Staged;
4948
use core::fmt;
5049
use core::mem;
5150
use core::ops::Deref;
@@ -123,14 +122,6 @@ pub struct Wallet {
123122
secp: SecpCtx,
124123
}
125124

126-
impl Staged for Wallet {
127-
type ChangeSet = ChangeSet;
128-
129-
fn staged(&mut self) -> &mut Self::ChangeSet {
130-
&mut self.stage
131-
}
132-
}
133-
134125
/// An update to [`Wallet`].
135126
///
136127
/// It updates [`KeychainTxOutIndex`], [`bdk_chain::TxGraph`] and [`local_chain::LocalChain`] atomically.
@@ -2303,7 +2294,7 @@ impl Wallet {
23032294
Ok(())
23042295
}
23052296

2306-
/// Get a reference of the staged [`ChangeSet`] that are yet to be committed (if any).
2297+
/// Get a reference of the staged [`ChangeSet`] that is yet to be committed (if any).
23072298
pub fn staged(&self) -> Option<&ChangeSet> {
23082299
if self.stage.is_empty() {
23092300
None
@@ -2312,6 +2303,15 @@ impl Wallet {
23122303
}
23132304
}
23142305

2306+
/// Get a mutable reference of the staged [`ChangeSet`] that is yet to be commited (if any).
2307+
pub fn staged_mut(&mut self) -> Option<&mut ChangeSet> {
2308+
if self.stage.is_empty() {
2309+
None
2310+
} else {
2311+
Some(&mut self.stage)
2312+
}
2313+
}
2314+
23152315
/// Take the staged [`ChangeSet`] to be persisted now (if any).
23162316
pub fn take_staged(&mut self) -> Option<ChangeSet> {
23172317
self.stage.take()

crates/wallet/src/wallet/persisted.rs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use core::{
66
};
77

88
use alloc::boxed::Box;
9-
use chain::{Merge, Staged};
9+
use chain::Merge;
1010

1111
use crate::{descriptor::DescriptorError, ChangeSet, CreateParams, LoadParams, Wallet};
1212

@@ -206,13 +206,14 @@ impl PersistedWallet {
206206
where
207207
P: WalletPersister,
208208
{
209-
let stage = Staged::staged(&mut self.0);
210-
if stage.is_empty() {
211-
return Ok(false);
209+
match self.0.staged_mut() {
210+
Some(stage) => {
211+
P::persist(persister, &*stage)?;
212+
let _ = stage.take();
213+
Ok(true)
214+
}
215+
None => Ok(false),
212216
}
213-
P::persist(persister, &*stage)?;
214-
stage.take();
215-
Ok(true)
216217
}
217218

218219
/// Persist staged changes of wallet into an async `persister`.
@@ -222,13 +223,14 @@ impl PersistedWallet {
222223
where
223224
P: AsyncWalletPersister,
224225
{
225-
let stage = Staged::staged(&mut self.0);
226-
if stage.is_empty() {
227-
return Ok(false);
226+
match self.0.staged_mut() {
227+
Some(stage) => {
228+
P::persist(persister, &*stage).await?;
229+
let _ = stage.take();
230+
Ok(true)
231+
}
232+
None => Ok(false),
228233
}
229-
P::persist(persister, &*stage).await?;
230-
stage.take();
231-
Ok(true)
232234
}
233235
}
234236

0 commit comments

Comments
 (0)