diff --git a/src/bdk.udl b/src/bdk.udl index 2253ca2..0f9d579 100644 --- a/src/bdk.udl +++ b/src/bdk.udl @@ -136,6 +136,7 @@ callback interface Progress { interface Wallet { [Throws=BdkError] constructor(string descriptor, string? change_descriptor, Network network, DatabaseConfig database_config); + [Throws=BdkError] AddressInfo get_address(AddressIndex address_index); [Throws=BdkError] u64 get_balance(); diff --git a/src/lib.rs b/src/lib.rs index 43446e2..a001e87 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,12 +11,13 @@ use bdk::database::any::{AnyDatabase, SledDbConfiguration, SqliteDbConfiguration use bdk::database::{AnyDatabaseConfig, ConfigurableDatabase}; use bdk::keys::bip39::{Language, Mnemonic, WordCount}; use bdk::keys::{DerivableKey, ExtendedKey, GeneratableKey, GeneratedKey}; +use bdk::wallet::AddressInfo as BdkAddressInfo; +use bdk::wallet::AddressIndex as BdkAddressIndex; use bdk::miniscript::BareCtx; +use std::convert::{TryFrom, From}; use bdk::{ BlockTime, Error, FeeRate, SignOptions, SyncOptions as BdkSyncOptions, Wallet as BdkWallet, }; -use std::convert::TryFrom; -use std::convert::From; use std::fmt; use std::ops::Deref; use std::str::FromStr; @@ -26,15 +27,12 @@ uniffi_macros::include_scaffolding!("bdk"); type BdkError = Error; -// we redefine a simpler version of bdk::wallet::AddressInfo -// it has an `address` field of type String -// instead of the `address` field of type `Address` defined in bitcoin::util::address::Address pub struct AddressInfo { pub index: u32, pub address: String, } -impl From for AddressInfo { +impl From for AddressInfo { fn from(x: bdk::wallet::AddressInfo) -> AddressInfo { AddressInfo { index: x.index, @@ -43,18 +41,16 @@ impl From for AddressInfo { } } -// we redefine a simpler version of bdk::wallet::AddressIndex -// only keeping the `New` and `LastUnused` variants of the enum pub enum AddressIndex { New, LastUnused, } -impl From for bdk::wallet::AddressIndex { - fn from(x: AddressIndex) -> bdk::wallet::AddressIndex { +impl From for BdkAddressIndex { + fn from(x: AddressIndex) -> BdkAddressIndex { match x { - AddressIndex::New => bdk::wallet::AddressIndex::New, - AddressIndex::LastUnused => bdk::wallet::AddressIndex::LastUnused + AddressIndex::New => BdkAddressIndex::New, + AddressIndex::LastUnused => BdkAddressIndex::LastUnused } } } @@ -269,26 +265,11 @@ impl Wallet { } fn get_address(&self, address_index: AddressIndex) -> Result { - match self.get_wallet().get_address(bdk::wallet::AddressIndex::from(address_index)) { - Ok(address_info) => Ok(AddressInfo::from(address_info)), - Err(bdk_error) => Err(bdk_error), - } + self.get_wallet() + .get_address(address_index.into()) + .map(AddressInfo::from) } - // fn get_new_address(&self) -> Result { - // match self.get_wallet().get_address(AddressIndex::New) { - // Ok(address_info) => Ok(AddressInformation::from(address_info)), - // Err(BdkError) => Err(BdkError), - // } - // } - - // fn get_last_unused_address(&self) -> Result { - // match self.get_wallet().get_address(AddressIndex::LastUnused) { - // Ok(address_info) => Ok(AddressInformation::from(address_info)), - // Err(BdkError) => Err(BdkError), - // } - // } - fn get_balance(&self) -> Result { self.get_wallet().get_balance() }