Share OfflineWalletOperations
This commit is contained in:
parent
c15993310d
commit
2db59de659
@ -98,6 +98,7 @@ callback interface BdkProgress {
|
||||
interface OnlineWallet {
|
||||
[Throws=BdkError]
|
||||
constructor(string descriptor, Network network, DatabaseConfig database_config, BlockchainConfig blockchain_config);
|
||||
string get_new_address();
|
||||
Network get_network();
|
||||
[Throws=BdkError]
|
||||
void sync(BdkProgress progress_update, u32? max_address_param);
|
||||
|
42
src/lib.rs
42
src/lib.rs
@ -10,7 +10,7 @@ use bdk::wallet::AddressIndex;
|
||||
use bdk::Error;
|
||||
use bdk::Wallet;
|
||||
use std::convert::TryFrom;
|
||||
use std::sync::Mutex;
|
||||
use std::sync::{Mutex, MutexGuard};
|
||||
|
||||
uniffi_macros::include_scaffolding!("bdk");
|
||||
|
||||
@ -42,10 +42,30 @@ pub enum BlockchainConfig {
|
||||
Esplora { config: EsploraConfig },
|
||||
}
|
||||
|
||||
trait WalletHolder<B> {
|
||||
fn get_wallet(&self) -> MutexGuard<Wallet<B, AnyDatabase>>;
|
||||
}
|
||||
|
||||
struct OfflineWallet {
|
||||
wallet: Mutex<Wallet<(), AnyDatabase>>,
|
||||
}
|
||||
|
||||
impl WalletHolder<()> for OfflineWallet {
|
||||
fn get_wallet(&self) -> MutexGuard<Wallet<(), AnyDatabase>> {
|
||||
self.wallet.lock().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
trait OfflineWalletOperations<B>: WalletHolder<B> {
|
||||
fn get_new_address(&self) -> String {
|
||||
self.get_wallet()
|
||||
.get_address(AddressIndex::New)
|
||||
.unwrap()
|
||||
.address
|
||||
.to_string()
|
||||
}
|
||||
}
|
||||
|
||||
impl OfflineWallet {
|
||||
fn new(
|
||||
descriptor: String,
|
||||
@ -60,18 +80,10 @@ impl OfflineWallet {
|
||||
let wallet = Mutex::new(Wallet::new_offline(&descriptor, None, network, database)?);
|
||||
Ok(OfflineWallet { wallet })
|
||||
}
|
||||
|
||||
fn get_new_address(&self) -> String {
|
||||
self.wallet
|
||||
.lock()
|
||||
.unwrap()
|
||||
.get_address(AddressIndex::New)
|
||||
.unwrap()
|
||||
.address
|
||||
.to_string()
|
||||
}
|
||||
}
|
||||
|
||||
impl OfflineWalletOperations<()> for OfflineWallet {}
|
||||
|
||||
struct OnlineWallet {
|
||||
wallet: Mutex<Wallet<AnyBlockchain, AnyDatabase>>,
|
||||
}
|
||||
@ -155,5 +167,13 @@ impl OnlineWallet {
|
||||
}
|
||||
}
|
||||
|
||||
impl WalletHolder<AnyBlockchain> for OnlineWallet {
|
||||
fn get_wallet(&self) -> MutexGuard<Wallet<AnyBlockchain, AnyDatabase>> {
|
||||
self.wallet.lock().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl OfflineWalletOperations<AnyBlockchain> for OnlineWallet {}
|
||||
|
||||
uniffi::deps::static_assertions::assert_impl_all!(OfflineWallet: Sync, Send);
|
||||
uniffi::deps::static_assertions::assert_impl_all!(OnlineWallet: Sync, Send);
|
||||
|
Loading…
x
Reference in New Issue
Block a user