diff --git a/src/bdk.udl b/src/bdk.udl index 597833b..e79ddcc 100644 --- a/src/bdk.udl +++ b/src/bdk.udl @@ -44,8 +44,19 @@ enum BdkError { "Sled", }; +dictionary SledDbConfiguration { + string path; + string tree_name; +}; + +[Enum] +interface DatabaseConfig { + Memory(string junk); + Sled(SledDbConfiguration configuration); +}; + interface OfflineWallet { [Throws=BdkError] - constructor(string descriptor); + constructor(string descriptor, DatabaseConfig database_config); string get_new_address(); }; diff --git a/src/lib.rs b/src/lib.rs index 5d8cd69..db824ca 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,6 @@ use bdk::bitcoin::Network; -use bdk::database::MemoryDatabase; +use bdk::database::any::{AnyDatabase, SledDbConfiguration}; +use bdk::database::{AnyDatabaseConfig, ConfigurableDatabase}; use bdk::wallet::AddressIndex; use bdk::Error; use bdk::Wallet; @@ -8,14 +9,24 @@ use std::sync::Mutex; type BdkError = Error; +pub enum DatabaseConfig { + Memory { junk: String }, + Sled { configuration: SledDbConfiguration }, +} + uniffi_macros::include_scaffolding!("bdk"); + struct OfflineWallet { - wallet: Mutex>, + wallet: Mutex>, } impl OfflineWallet { - fn new(descriptor: String) -> Result { - let database = MemoryDatabase::default(); + fn new(descriptor: String, database_config: DatabaseConfig) -> Result { + let any_database_config = match database_config { + DatabaseConfig::Memory { .. } => AnyDatabaseConfig::Memory(()), + DatabaseConfig::Sled { configuration } => AnyDatabaseConfig::Sled(configuration), + }; + let database = AnyDatabase::from_config(&any_database_config)?; let wallet = Mutex::new(Wallet::new_offline( &descriptor, None,