use http::{HeaderMap, HeaderValue, header::IntoHeaderName};
use crate::{Error, blocking::Client, client_builder::ClientBuilder};
#[derive(Default)]
pub struct BlockingClientBuilder {
builder: ClientBuilder,
}
impl ClientBuilder {
pub(crate) fn blocking(self) -> Result<Client, Error> {
if let Some(e) = self.err {
return Err(e);
}
let config = ureq::Agent::config_builder()
.http_status_as_error(false)
.build();
Ok(Client::new_inner(
config.into(),
self.headers,
self.default_max_retries,
self.max_bytes_per_second,
))
}
}
impl BlockingClientBuilder {
pub fn new() -> Self {
Self {
builder: ClientBuilder::default(),
}
}
pub fn user_agent<V>(mut self, user_agent: V) -> Self
where
HeaderValue: TryFrom<V>,
<HeaderValue as TryFrom<V>>::Error: Into<http::Error>,
{
self.builder = self.builder.user_agent(user_agent);
self
}
pub fn header<K, V>(mut self, key: K, value: V) -> Self
where
K: IntoHeaderName,
HeaderValue: TryFrom<V>,
<HeaderValue as TryFrom<V>>::Error: Into<http::Error>,
{
self.builder = self.builder.header(key, value);
self
}
pub fn headers(mut self, headers: HeaderMap) -> Self {
self.builder = self.builder.headers(headers);
self
}
pub fn max_retries(mut self, max_retries: Option<u64>) -> Self {
self.builder = self.builder.max_retries(max_retries);
self
}
pub fn max_bytes_per_second(mut self, max: Option<u64>) -> Self {
self.builder = self.builder.max_bytes_per_second(max);
self
}
pub fn build(self) -> Result<Client, Error> {
self.builder.blocking()
}
}
impl From<ClientBuilder> for BlockingClientBuilder {
fn from(builder: ClientBuilder) -> Self {
Self { builder }
}
}