Implement Deref<Target=UrlClient> for EsploraBlockchain

There is currently no way to access the client
from the EsploraBlockchain. This makes it difficult
for users to extend it's functionality. This PR exposes
both the reqwest and ureq clients. This PR is related to
PR #705.
This commit is contained in:
Vladimir Fomene 2022-08-15 19:31:35 +03:00
parent 9f9ffd0efd
commit baf7eaace6
No known key found for this signature in database
GPG Key ID: 8BBAE8CC0B1530A0
2 changed files with 22 additions and 2 deletions

View File

@ -12,6 +12,7 @@
//! Esplora by way of `reqwest` HTTP client.
use std::collections::{HashMap, HashSet};
use std::ops::Deref;
use bitcoin::consensus::{deserialize, serialize};
use bitcoin::hashes::hex::{FromHex, ToHex};
@ -31,8 +32,9 @@ use crate::database::BatchDatabase;
use crate::error::Error;
use crate::FeeRate;
/// Structure encapsulates Esplora client
#[derive(Debug)]
struct UrlClient {
pub struct UrlClient {
url: String,
// We use the async client instead of the blocking one because it automatically uses `fetch`
// when the target platform is wasm32.
@ -101,6 +103,14 @@ impl Blockchain for EsploraBlockchain {
}
}
impl Deref for EsploraBlockchain {
type Target = UrlClient;
fn deref(&self) -> &Self::Target {
&self.url_client
}
}
impl StatelessBlockchain for EsploraBlockchain {}
#[maybe_async]

View File

@ -14,6 +14,7 @@
use std::collections::{HashMap, HashSet};
use std::io;
use std::io::Read;
use std::ops::Deref;
use std::time::Duration;
#[allow(unused_imports)]
@ -33,8 +34,9 @@ use crate::database::BatchDatabase;
use crate::error::Error;
use crate::FeeRate;
/// Structure encapsulates ureq Esplora client
#[derive(Debug, Clone)]
struct UrlClient {
pub struct UrlClient {
url: String,
agent: Agent,
}
@ -98,6 +100,14 @@ impl Blockchain for EsploraBlockchain {
}
}
impl Deref for EsploraBlockchain {
type Target = UrlClient;
fn deref(&self) -> &Self::Target {
&self.url_client
}
}
impl StatelessBlockchain for EsploraBlockchain {}
impl GetHeight for EsploraBlockchain {