Merge bitcoindevkit/bdk-ffi#109: Refactor memory database config enum
cc3736809a2910d3a739b37a61f1613404fba572 Fix memory database configuration enum (thunderbiscuit) Pull request description: The `DatabaseConfig.Memory` enum currently requires a "junk" string argument which is not used when creating the wallet: ```rust // lib.rs line 24 pub enum DatabaseConfig { Memory { junk: String }, Sled { config: SledDbConfiguration }, } // lib.rs line 209 impl Wallet { fn new( descriptor: String, change_descriptor: Option<String>, network: Network, database_config: DatabaseConfig, blockchain_config: BlockchainConfig, ) -> Result<Self, BdkError> { let any_database_config = match database_config { DatabaseConfig::Memory { .. } => AnyDatabaseConfig::Memory(()), DatabaseConfig::Sled { config } => AnyDatabaseConfig::Sled(config), }; ``` Which translates to the udl file like this: ```txt [Enum] interface DatabaseConfig { Memory(string junk); Sled(SledDbConfiguration config); }; ``` According to the [docs from uniffi-rs](https://mozilla.github.io/uniffi-rs/udl/enumerations.html) the `interface` here is required because the enums have named fields. But after testing I found that we can declare the udl file like so, and remove the requirement for the `junk` argument: ```txt [Enum] interface DatabaseConfig { Memory(); Sled(SledDbConfiguration config); }; ``` On the Rust side we then have ```rust pub enum DatabaseConfig { Memory, Sled { config: SledDbConfiguration }, } ``` And the resulting bindings go from (note that the bindings transform the enum into a sealed class rather than a Kotlin enum) ```kotlin sealed class DatabaseConfig { data class Memory( val junk: String ) : DatabaseConfig() data class Sled( val config: SledDbConfiguration ) : DatabaseConfig() ``` to ```kotlin sealed class DatabaseConfig { object Memory : DatabaseConfig() data class Sled( val config: SledDbConfiguration ) : DatabaseConfig() ``` Which makes the API simpler to use, and removes the confusion created by having to provide an empty string (or not know what we're supposed to provide) to the `Memory()` enum. The final call-site looks like this: ```kotlin fun onlineWalletSyncGetBalance() { // val db = DatabaseConfig.Memory("") val db = DatabaseConfig.Memory val client = BlockchainConfig.Electrum( ElectrumConfig( "ssl://electrum.blockstream.info:60002", null, 5u, null, 100u ) ) val wallet = Wallet(descriptor, null, Network.REGTEST, databaseConfig, blockchainConfig) wallet.sync(LogProgress(), null) val balance = wallet.getBalance() assertTrue(balance > 0u) } ``` All tests run well on my side of things, but I'm opening this more as a discussion piece because I wasn't sure if there were other reasons for the choice of providing the argument to the `Memory` enum, or other design choices I'm not aware of. Any thoughts on this @artfuldev? I think you were the one who wrote the initial enum. Top commit has no ACKs. Tree-SHA512: 135e5943039a08522773f721a7cf6bbb93bd5bb9394bf42a30bab5f3e16fd35ce078056756e020a666d4f574d74080bc3404cc81809c0d7e0afe5c9471878425
This commit is contained in:
commit
f76f3234b4
@ -67,7 +67,7 @@ dictionary SqliteDbConfiguration {
|
||||
|
||||
[Enum]
|
||||
interface DatabaseConfig {
|
||||
Memory(string junk);
|
||||
Memory();
|
||||
Sled(SledDbConfiguration config);
|
||||
Sqlite(SqliteDbConfiguration config);
|
||||
};
|
||||
|
@ -22,7 +22,7 @@ uniffi_macros::include_scaffolding!("bdk");
|
||||
type BdkError = Error;
|
||||
|
||||
pub enum DatabaseConfig {
|
||||
Memory { junk: String },
|
||||
Memory,
|
||||
Sled { config: SledDbConfiguration },
|
||||
Sqlite { config: SqliteDbConfiguration },
|
||||
}
|
||||
@ -216,7 +216,7 @@ impl Wallet {
|
||||
blockchain_config: BlockchainConfig,
|
||||
) -> Result<Self, BdkError> {
|
||||
let any_database_config = match database_config {
|
||||
DatabaseConfig::Memory { .. } => AnyDatabaseConfig::Memory(()),
|
||||
DatabaseConfig::Memory => AnyDatabaseConfig::Memory(()),
|
||||
DatabaseConfig::Sled { config } => AnyDatabaseConfig::Sled(config),
|
||||
DatabaseConfig::Sqlite { config } => AnyDatabaseConfig::Sqlite(config),
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user