]> Untitled Git - bdk/commitdiff
feat(core): Add `is_empty` methods to `TxUpdate` and `{}_Response` types
author志宇 <hello@evanlinjin.me>
Sun, 18 May 2025 23:52:17 +0000 (09:52 +1000)
committerWei Chen <wzc110@gmail.com>
Fri, 23 May 2025 10:12:18 +0000 (10:12 +0000)
crates/core/src/spk_client.rs
crates/core/src/tx_update.rs
crates/core/tests/test_spk_client.rs [new file with mode: 0644]
crates/core/tests/test_tx_update.rs [new file with mode: 0644]

index b6a8e0204e21a6a8f035204557ef115e92935324..5f3cef43086f280c0ebf1489bd92037c0d662a63 100644 (file)
@@ -403,6 +403,13 @@ impl<A> Default for SyncResponse<A> {
     }
 }
 
+impl<A> SyncResponse<A> {
+    /// Returns true if the `SyncResponse` is empty.
+    pub fn is_empty(&self) -> bool {
+        self.tx_update.is_empty() && self.chain_update.is_none()
+    }
+}
+
 /// Builds a [`FullScanRequest`].
 ///
 /// Construct with [`FullScanRequest::builder`].
@@ -560,6 +567,15 @@ impl<K, A> Default for FullScanResponse<K, A> {
     }
 }
 
+impl<K, A> FullScanResponse<K, A> {
+    /// Returns true if the `FullScanResponse` is empty.
+    pub fn is_empty(&self) -> bool {
+        self.tx_update.is_empty()
+            && self.last_active_indices.is_empty()
+            && self.chain_update.is_none()
+    }
+}
+
 struct KeychainSpkIter<'r, K> {
     keychain: K,
     spks: Option<&'r mut Box<dyn Iterator<Item = Indexed<ScriptBuf>> + Send>>,
index 89a224fbd801d384f78cc257ac92327fa6a20928..9be91f1bafbbe2a7d0a7c10774d0b0edabd42459 100644 (file)
@@ -64,6 +64,17 @@ impl<A> Default for TxUpdate<A> {
     }
 }
 
+impl<A> TxUpdate<A> {
+    /// Returns true if the `TxUpdate` contains no elements in any of its fields.
+    pub fn is_empty(&self) -> bool {
+        self.txs.is_empty()
+            && self.txouts.is_empty()
+            && self.anchors.is_empty()
+            && self.seen_ats.is_empty()
+            && self.evicted_ats.is_empty()
+    }
+}
+
 impl<A: Ord> TxUpdate<A> {
     /// Transforms the [`TxUpdate`] to have `anchors` (`A`) of another type (`A2`).
     ///
diff --git a/crates/core/tests/test_spk_client.rs b/crates/core/tests/test_spk_client.rs
new file mode 100644 (file)
index 0000000..38766ac
--- /dev/null
@@ -0,0 +1,13 @@
+use bdk_core::spk_client::{FullScanResponse, SyncResponse};
+
+#[test]
+fn test_empty() {
+    assert!(
+        FullScanResponse::<(), ()>::default().is_empty(),
+        "Default `FullScanResponse` must be empty"
+    );
+    assert!(
+        SyncResponse::<()>::default().is_empty(),
+        "Default `SyncResponse` must be empty"
+    );
+}
diff --git a/crates/core/tests/test_tx_update.rs b/crates/core/tests/test_tx_update.rs
new file mode 100644 (file)
index 0000000..d5d2dbc
--- /dev/null
@@ -0,0 +1,9 @@
+use bdk_core::TxUpdate;
+
+#[test]
+fn test_empty() {
+    assert!(
+        TxUpdate::<()>::default().is_empty(),
+        "Default `TxUpdate` must be empty"
+    );
+}