Skip to content

Commit 371e1d4

Browse files
committed
bindings: accept a string as electrum url
1 parent f1e58fa commit 371e1d4

File tree

6 files changed

+21
-30
lines changed

6 files changed

+21
-30
lines changed

lwk_bindings/src/electrum_client.rs

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,6 @@ pub struct ElectrumClient {
1212
url: lwk_wollet::ElectrumUrl,
1313
}
1414

15-
/// An url to an electrum server
16-
#[derive(uniffi::Object, Debug)]
17-
pub struct ElectrumUrl {
18-
inner: lwk_wollet::ElectrumUrl,
19-
}
20-
2115
#[uniffi::export]
2216
impl ElectrumClient {
2317
/// Construct an Electrum client
@@ -38,11 +32,14 @@ impl ElectrumClient {
3832

3933
#[uniffi::constructor]
4034
/// Construct an electrum client from an Electrum URL
41-
pub fn from_url(electrum_url: &ElectrumUrl) -> Result<Arc<Self>, LwkError> {
42-
let client = lwk_wollet::ElectrumClient::new(&electrum_url.inner)?;
35+
pub fn from_url(electrum_url: &str) -> Result<Arc<Self>, LwkError> {
36+
let url = electrum_url
37+
.parse::<lwk_wollet::ElectrumUrl>()
38+
.map_err(|e| LwkError::Generic { msg: e.to_string() })?;
39+
let client = lwk_wollet::ElectrumClient::new(&url)?;
4340
Ok(Arc::new(Self {
4441
inner: Arc::new(Mutex::new(client)),
45-
url: electrum_url.inner.clone(),
42+
url,
4643
}))
4744
}
4845

@@ -111,17 +108,6 @@ impl ElectrumClient {
111108
}
112109
}
113110

114-
#[uniffi::export]
115-
impl ElectrumUrl {
116-
/// Create a new electrum url
117-
#[uniffi::constructor]
118-
pub fn new(url: &str, tls: bool, validate_domain: bool) -> Result<Self, LwkError> {
119-
let url = lwk_wollet::ElectrumUrl::new(url, tls, validate_domain)
120-
.map_err(lwk_wollet::Error::Url)?;
121-
Ok(Self { inner: url })
122-
}
123-
}
124-
125111
impl ElectrumClient {
126112
/// Create a new electrum client with the same connection parameters
127113
#[allow(unused)] // TODO remove once lwk_boltz is integrated

lwk_bindings/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ pub use crate::signer::{Bip, Signer};
5454
pub use crate::wollet::Wollet;
5555
pub use chain::Chain;
5656
pub use desc::WolletDescriptor;
57-
pub use electrum_client::{ElectrumClient, ElectrumUrl};
57+
pub use electrum_client::ElectrumClient;
5858
pub use error::LwkError;
5959
pub use esplora_client::{EsploraClient, EsploraClientBuilder};
6060
pub use liquidex::{AssetAmount, UnvalidatedLiquidexProposal, ValidatedLiquidexProposal};

lwk_bindings/src/lightning.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ use std::{
77
};
88

99
use crate::{
10-
Address, Bolt11Invoice, ElectrumClient, ElectrumUrl, EsploraClient, LightningPayment, LwkError,
11-
Mnemonic, Network,
10+
Address, Bolt11Invoice, ElectrumClient, EsploraClient, LightningPayment, LwkError, Mnemonic,
11+
Network,
1212
};
1313
use elements::bitcoin;
1414
use log::{Level, Metadata, Record};
@@ -102,7 +102,7 @@ pub struct BoltzSessionBuilder {
102102
#[uniffi(default = None)]
103103
referral_id: Option<String>,
104104
#[uniffi(default = None)]
105-
bitcoin_electrum_client: Option<Arc<ElectrumUrl>>,
105+
bitcoin_electrum_client_url: Option<String>,
106106
}
107107

108108
/// A session to pay and receive lightning payments.
@@ -198,7 +198,7 @@ impl BoltzSession {
198198
timeout_advance: None,
199199
next_index_to_use: None,
200200
referral_id: None,
201-
bitcoin_electrum_client: None,
201+
bitcoin_electrum_client_url: None,
202202
};
203203
Self::from_builder(builder)
204204
}

lwk_boltz/src/error.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ use lightning::bitcoin::XKeyIdentifier;
55

66
#[derive(Debug, thiserror::Error)]
77
pub enum Error {
8+
#[error("Invalid electrum url: {0}")]
9+
InvalidElectrumUrl(#[from] lwk_wollet::UrlError),
10+
811
#[error("Invalid swap state: {0}")]
912
InvalidSwapState(String),
1013

lwk_boltz/src/lib.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -342,9 +342,10 @@ impl BoltzSessionBuilder {
342342
}
343343

344344
/// Set the url of the bitcoin electrum client
345-
pub fn bitcoin_electrum_client(mut self, bitcoin_electrum_client: ElectrumUrl) -> Self {
346-
self.bitcoin_electrum_client = Some(bitcoin_electrum_client);
347-
self
345+
pub fn bitcoin_electrum_client(mut self, bitcoin_electrum_client: &str) -> Result<Self, Error> {
346+
let url = bitcoin_electrum_client.parse::<ElectrumUrl>()?;
347+
self.bitcoin_electrum_client = Some(url);
348+
Ok(self)
348349
}
349350

350351
/// Build the `BoltzSession`

lwk_boltz/tests/chain_swaps.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ mod tests {
2424
clients::{AnyClient, ElectrumClient},
2525
BoltzSession,
2626
};
27+
use lwk_wollet::bitcoin;
2728
use lwk_wollet::elements;
2829
use lwk_wollet::secp256k1::rand::thread_rng;
2930
use lwk_wollet::ElementsNetwork;
30-
use lwk_wollet::{bitcoin, ElectrumUrl};
3131
use std::str::FromStr;
3232
use std::sync::Arc;
3333
use std::time::Duration;
@@ -420,7 +420,8 @@ mod tests {
420420
// Test polling mode
421421
let session_polling = BoltzSession::builder(network, AnyClient::Electrum(client.clone()))
422422
.polling(true)
423-
.bitcoin_electrum_client(ElectrumUrl::new(DEFAULT_REGTEST_NODE, false, false).unwrap()) // it's the same endpoint, just testing the builder setting
423+
.bitcoin_electrum_client(&format!("tcp://{}", DEFAULT_REGTEST_NODE)) // it's the same endpoint, just testing the builder setting
424+
.unwrap()
424425
.build()
425426
.await
426427
.unwrap();

0 commit comments

Comments
 (0)