From baf7eaace66edcae8bf3252a962b9417b704ba26 Mon Sep 17 00:00:00 2001 From: Vladimir Fomene Date: Mon, 15 Aug 2022 19:31:35 +0300 Subject: [PATCH] Implement Deref 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. --- src/blockchain/esplora/reqwest.rs | 12 +++++++++++- src/blockchain/esplora/ureq.rs | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/blockchain/esplora/reqwest.rs b/src/blockchain/esplora/reqwest.rs index 302e811fd..b549f30a3 100644 --- a/src/blockchain/esplora/reqwest.rs +++ b/src/blockchain/esplora/reqwest.rs @@ -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] diff --git a/src/blockchain/esplora/ureq.rs b/src/blockchain/esplora/ureq.rs index 9899b9046..7a9388a08 100644 --- a/src/blockchain/esplora/ureq.rs +++ b/src/blockchain/esplora/ureq.rs @@ -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 {