From 41afeafcd3ee0508a430946a32b5db5c2be7404e Mon Sep 17 00:00:00 2001 From: artfuldev Date: Fri, 15 Oct 2021 01:54:32 +0530 Subject: [PATCH] Test a callback --- src/bdk.udl | 6 ++++++ src/lib.rs | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/bdk.udl b/src/bdk.udl index 593d4e8..cbc79a6 100644 --- a/src/bdk.udl +++ b/src/bdk.udl @@ -91,8 +91,14 @@ interface BlockchainConfig { Esplora(EsploraConfig config); }; +callback interface BdkProgress { + void update(f32 progress, string? message); +}; + interface OnlineWallet { [Throws=BdkError] constructor(string descriptor, Network network, DatabaseConfig database_config, BlockchainConfig blockchain_config); Network get_network(); + [Throws=BdkError] + void sync(BdkProgress progress_update, u32? max_address_param); }; diff --git a/src/lib.rs b/src/lib.rs index a1add54..94cc219 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,6 @@ use bdk::bitcoin::Network; use bdk::blockchain::any::{AnyBlockchain, AnyBlockchainConfig}; +use bdk::blockchain::Progress; use bdk::blockchain::{ electrum::ElectrumBlockchainConfig, esplora::EsploraBlockchainConfig, ConfigurableBlockchain, }; @@ -75,6 +76,24 @@ struct OnlineWallet { wallet: Mutex>, } +pub trait BdkProgress: Send { + fn update(&self, progress: f32, message: Option); +} + +struct BdkProgressHolder { + progress_update: Mutex>, +} + +impl Progress for BdkProgressHolder { + fn update(&self, progress: f32, message: Option) -> Result<(), Error> { + self.progress_update + .lock() + .unwrap() + .update(progress, message); + Ok(()) + } +} + impl OnlineWallet { fn new( descriptor: String, @@ -121,6 +140,20 @@ impl OnlineWallet { fn get_network(&self) -> Network { self.wallet.lock().unwrap().network() } + + fn sync( + &self, + progress_update: Box, + max_address_param: Option, + ) -> Result<(), BdkError> { + progress_update.update(21.0, Some("message".to_string())); + self.wallet.lock().unwrap().sync( + BdkProgressHolder { + progress_update: Mutex::new(progress_update), + }, + max_address_param, + ) + } } uniffi::deps::static_assertions::assert_impl_all!(OfflineWallet: Sync, Send);