]> Untitled Git - bdk/commitdiff
feat(wallet)!: remove dependency on `bdk_chain::Staged`
author志宇 <hello@evanlinjin.me>
Sun, 11 Aug 2024 09:28:53 +0000 (09:28 +0000)
committer志宇 <hello@evanlinjin.me>
Thu, 15 Aug 2024 04:13:02 +0000 (04:13 +0000)
Introduce `Wallet::staged_mut` method.

crates/wallet/src/wallet/mod.rs
crates/wallet/src/wallet/persisted.rs

index f98b16e911646e3bd40865a45f3fdb4d8a866d70..4cd721ba1c0c3acedf98a00615f0e282c9dc651c 100644 (file)
@@ -45,7 +45,6 @@ use bitcoin::{
 use bitcoin::{consensus::encode::serialize, transaction, BlockHash, Psbt};
 use bitcoin::{constants::genesis_block, Amount};
 use bitcoin::{secp256k1::Secp256k1, Weight};
-use chain::Staged;
 use core::fmt;
 use core::mem;
 use core::ops::Deref;
@@ -123,14 +122,6 @@ pub struct Wallet {
     secp: SecpCtx,
 }
 
-impl Staged for Wallet {
-    type ChangeSet = ChangeSet;
-
-    fn staged(&mut self) -> &mut Self::ChangeSet {
-        &mut self.stage
-    }
-}
-
 /// An update to [`Wallet`].
 ///
 /// It updates [`KeychainTxOutIndex`], [`bdk_chain::TxGraph`] and [`local_chain::LocalChain`] atomically.
@@ -2303,7 +2294,7 @@ impl Wallet {
         Ok(())
     }
 
-    /// Get a reference of the staged [`ChangeSet`] that are yet to be committed (if any).
+    /// Get a reference of the staged [`ChangeSet`] that is yet to be committed (if any).
     pub fn staged(&self) -> Option<&ChangeSet> {
         if self.stage.is_empty() {
             None
@@ -2312,6 +2303,15 @@ impl Wallet {
         }
     }
 
+    /// Get a mutable reference of the staged [`ChangeSet`] that is yet to be commited (if any).
+    pub fn staged_mut(&mut self) -> Option<&mut ChangeSet> {
+        if self.stage.is_empty() {
+            None
+        } else {
+            Some(&mut self.stage)
+        }
+    }
+
     /// Take the staged [`ChangeSet`] to be persisted now (if any).
     pub fn take_staged(&mut self) -> Option<ChangeSet> {
         self.stage.take()
index bef34a1f359a682daf324456084afb8e5a348cb4..cebc3fbd05efc9b973ce30cd2b070e1af235e185 100644 (file)
@@ -6,7 +6,7 @@ use core::{
 };
 
 use alloc::boxed::Box;
-use chain::{Merge, Staged};
+use chain::Merge;
 
 use crate::{descriptor::DescriptorError, ChangeSet, CreateParams, LoadParams, Wallet};
 
@@ -206,13 +206,14 @@ impl PersistedWallet {
     where
         P: WalletPersister,
     {
-        let stage = Staged::staged(&mut self.0);
-        if stage.is_empty() {
-            return Ok(false);
+        match self.0.staged_mut() {
+            Some(stage) => {
+                P::persist(persister, &*stage)?;
+                let _ = stage.take();
+                Ok(true)
+            }
+            None => Ok(false),
         }
-        P::persist(persister, &*stage)?;
-        stage.take();
-        Ok(true)
     }
 
     /// Persist staged changes of wallet into an async `persister`.
@@ -222,13 +223,14 @@ impl PersistedWallet {
     where
         P: AsyncWalletPersister,
     {
-        let stage = Staged::staged(&mut self.0);
-        if stage.is_empty() {
-            return Ok(false);
+        match self.0.staged_mut() {
+            Some(stage) => {
+                P::persist(persister, &*stage).await?;
+                let _ = stage.take();
+                Ok(true)
+            }
+            None => Ok(false),
         }
-        P::persist(persister, &*stage).await?;
-        stage.take();
-        Ok(true)
     }
 }