#[cfg(feature = "socks")]
use std::net::SocketAddr;
use std::time::Duration;
#[cfg(feature = "socks")]
use reqwest::Proxy;
use reqwest::{Client, ClientBuilder};
use url::Url;
use crate::client::MempoolClient;
use crate::error::Error;
#[derive(Debug, Clone)]
pub struct MempoolClientBuilder {
pub url: Url,
pub timeout: Duration,
#[cfg(feature = "socks")]
pub proxy: Option<SocketAddr>,
}
impl MempoolClientBuilder {
pub fn new(url: Url) -> Self {
Self {
url,
timeout: Duration::from_secs(60),
#[cfg(feature = "socks")]
proxy: None,
}
}
#[inline]
pub fn timeout(mut self, timeout: Duration) -> Self {
self.timeout = timeout;
self
}
#[inline]
#[cfg(feature = "socks")]
pub fn proxy(mut self, proxy: SocketAddr) -> Self {
self.proxy = Some(proxy);
self
}
pub fn build(self) -> Result<MempoolClient, Error> {
let mut builder: ClientBuilder = Client::builder();
#[cfg(all(feature = "socks", not(target_arch = "wasm32")))]
if let Some(proxy) = self.proxy {
let proxy: String = format!("socks5h://{proxy}");
builder = builder.proxy(Proxy::all(proxy)?);
}
builder = builder.timeout(self.timeout);
let client: Client = builder.build()?;
Ok(MempoolClient::from_client(self.url, client))
}
}