From: valued mammal Date: Tue, 6 Aug 2024 18:52:14 +0000 (-0400) Subject: fix(wallet): Change FromSql type to `Option<_>` X-Git-Tag: v1.0.0-beta.2~11^2~4 X-Git-Url: http://internal-gitweb-vhost/script/%22https:/database/scripts/rpc/static/gitweb.js?a=commitdiff_plain;h=31f1c2d665363137e6a2d9fda3ae4ed2532d680b;p=bdk fix(wallet): Change FromSql type to `Option<_>` when selecting a wallet row from sqlite. This is consistent with the structure of the wallet `ChangeSet` where the fields `descriptor`, `change_descriptor`, and `network` are all optional. --- diff --git a/crates/chain/src/lib.rs b/crates/chain/src/lib.rs index 67e2aea1..a756ab11 100644 --- a/crates/chain/src/lib.rs +++ b/crates/chain/src/lib.rs @@ -113,6 +113,13 @@ pub type KeychainIndexed = ((K, u32), T); /// A wrapper that we use to impl remote traits for types in our crate or dependency crates. pub struct Impl(pub T); +impl Impl { + /// Returns the inner `T`. + pub fn into_inner(self) -> T { + self.0 + } +} + impl From for Impl { fn from(value: T) -> Self { Self(value) diff --git a/crates/wallet/src/wallet/changeset.rs b/crates/wallet/src/wallet/changeset.rs index 46b2f432..5f3b9b3d 100644 --- a/crates/wallet/src/wallet/changeset.rs +++ b/crates/wallet/src/wallet/changeset.rs @@ -103,16 +103,18 @@ impl ChangeSet { let row = wallet_statement .query_row([], |row| { Ok(( - row.get::<_, Impl>>("descriptor")?, - row.get::<_, Impl>>("change_descriptor")?, - row.get::<_, Impl>("network")?, + row.get::<_, Option>>>("descriptor")?, + row.get::<_, Option>>>( + "change_descriptor", + )?, + row.get::<_, Option>>("network")?, )) }) .optional()?; - if let Some((Impl(desc), Impl(change_desc), Impl(network))) = row { - changeset.descriptor = Some(desc); - changeset.change_descriptor = Some(change_desc); - changeset.network = Some(network); + if let Some((desc, change_desc, network)) = row { + changeset.descriptor = desc.map(Impl::into_inner); + changeset.change_descriptor = change_desc.map(Impl::into_inner); + changeset.network = network.map(Impl::into_inner); } changeset.local_chain = local_chain::ChangeSet::from_sqlite(db_tx)?;