Skip to main content

HttpClientBuilder

Struct HttpClientBuilder 

Source
pub struct HttpClientBuilder { /* private fields */ }
Expand description

Builder for configuring HTTP clients.

Provides a consistent way to configure HTTP clients across all API crates with sensible defaults.

§Example

use polyoxide_core::HttpClientBuilder;

let client = HttpClientBuilder::new("https://api.example.com")
    .timeout_ms(60_000)
    .pool_size(20)
    .build()
    .unwrap();

Implementations§

Source§

impl HttpClientBuilder

Source

pub fn new(base_url: impl Into<String>) -> Self

Create a new HTTP client builder with the given base URL.

Source

pub fn timeout_ms(self, timeout: u64) -> Self

Set request timeout in milliseconds.

Default: 30,000ms (30 seconds)

Source

pub fn pool_size(self, size: usize) -> Self

Set connection pool size per host.

Default: 10 connections

Source

pub fn with_rate_limiter(self, limiter: RateLimiter) -> Self

Set a rate limiter for this client: with_throttle with a RateLimiter.

Source

pub fn with_throttle(self, throttle: impl Throttle + 'static) -> Self

Set the throttle every request on this client goes through, shared with every with_base_url sibling.

Default: NoThrottle, which charges and holds nothing.

Source

pub fn with_retry_policy(self, policy: impl RetryPolicy + 'static) -> Self

Set the policy that decides what follows each response.

Default: DefaultRetryPolicy, which retries a 429 and nothing else.

Source

pub fn with_retry_config(self, config: RetryConfig) -> Self

Set the retry schedule: how many retries, and the backoff between them.

Source

pub fn with_max_concurrent(self, max: usize) -> Self

Set the maximum number of concurrent in-flight HTTP requests.

Prevents Cloudflare 1015 rate-limit errors caused by request bursts when many callers share the same client concurrently.

Source

pub fn runtime(self, runtime: Arc<dyn Runtime>) -> Self

Set the runtime this client’s waits, clock reads and spawns go through, shared with every with_base_url sibling.

Default: polyoxide_rt::default_runtime. A throttle installed with with_throttle keeps time on the runtime it was built on: build it on this one, as the venue crates do.

Source

pub fn gzip(self, enabled: bool) -> Self

Ask for gzip-compressed responses and decode them, or pin that off.

Unset by default, which leaves reqwest’s own default. This crate enables reqwest’s gzip feature, so an unset client asks for gzip and decodes the body transparently, as every client did for a consumer whose workspace enabled the feature before this setting existed. 0.37.0 set it off unless asked, which took compression away from those consumers.

Source

pub fn http_transport(self, transport: Arc<dyn HttpTransport>) -> Self

Send every attempt on transport instead of the target’s default, shared with every with_base_url sibling.

The builder’s timeout still travels with each request, as its HttpRequest::timeout, but pool_size and gzip feed only the default ReqwestTransport: a transport you inject owns its own connections and compression.

Source

pub fn build(self) -> Result<HttpClient, ApiError>

Build the HTTP client.

Trait Implementations§

Source§

impl Default for HttpClientBuilder

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more