/// A wrapper that we use to impl remote traits for types in our crate or dependency crates.
pub struct Impl<T>(pub T);
+impl<T> Impl<T> {
+ /// Returns the inner `T`.
+ pub fn into_inner(self) -> T {
+ self.0
+ }
+}
+
impl<T> From<T> for Impl<T> {
fn from(value: T) -> Self {
Self(value)
let row = wallet_statement
.query_row([], |row| {
Ok((
- row.get::<_, Impl<Descriptor<DescriptorPublicKey>>>("descriptor")?,
- row.get::<_, Impl<Descriptor<DescriptorPublicKey>>>("change_descriptor")?,
- row.get::<_, Impl<bitcoin::Network>>("network")?,
+ row.get::<_, Option<Impl<Descriptor<DescriptorPublicKey>>>>("descriptor")?,
+ row.get::<_, Option<Impl<Descriptor<DescriptorPublicKey>>>>(
+ "change_descriptor",
+ )?,
+ row.get::<_, Option<Impl<bitcoin::Network>>>("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)?;