Skip to main content

HttpRequestFactory

Struct HttpRequestFactory 

Source
pub struct HttpRequestFactory { /* private fields */ }
Available on crate features middleware and _api only.
Expand description

Cheaply cloneable request factory used to rebuild a request on demand.

This is the key boundary for middleware support:

  • the client captures the request inputs once
  • tower layers may clone the factory freely
  • retries rebuild the request instead of trying to clone an already-built reqwest::Request

The Arc is intentional. tower::retry needs to be able to clone the request handle without forcing the payload itself to be eagerly copied. The factory handle is cheap to clone; the request is only rebuilt when build() is actually called.

Implementations§

Source§

impl HttpRequestFactory

Source

pub fn new<F, Fut>(make_request: F) -> Self
where F: Fn() -> Fut + Send + Sync + 'static, Fut: Future<Output = Result<Request, OpenAIError>> + Send + 'static,

Available on non-target_family=wasm only.

Create a replayable request factory from an async request builder.

The closure is stored behind an Arc so this value stays cheap to clone when it is passed through tower layers.

Source

pub async fn build(&self) -> Result<Request, OpenAIError>

Rebuild the request for the current attempt.

This is what makes retries possible for non-cloneable bodies. The request is not cloned after construction; instead, the original request inputs are replayed to produce a fresh reqwest::Request each time.

Trait Implementations§

Source§

impl Clone for HttpRequestFactory

Source§

fn clone(&self) -> HttpRequestFactory

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for HttpRequestFactory

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Policy<HttpRequestFactory, Response, OpenAIError> for SimpleRetryPolicy

Source§

type Future = Pin<Box<dyn Future<Output = ()> + Send>>

The Future type returned by Policy::retry.
Source§

fn retry( &mut self, _req: &mut HttpRequestFactory, result: &mut Result<Response, OpenAIError>, ) -> Option<Self::Future>

Check the policy if a certain request should be retried. Read more
Source§

fn clone_request( &mut self, req: &HttpRequestFactory, ) -> Option<HttpRequestFactory>

Tries to clone a request before being passed to the inner service. Read more
Source§

impl<S> Service<HttpRequestFactory> for OpenAIRetry<S>
where S: Service<HttpRequestFactory, Response = Response, Error = OpenAIError> + Clone + Send + 'static, S::Future: Send + 'static,

Available on non-target_family=wasm only.
Source§

type Response = Response

Responses given by the service.
Source§

type Error = OpenAIError

Errors produced by the service.
Source§

type Future = Pin<Box<dyn Future<Output = Result<Response, OpenAIError>> + Send>>

The future response value.
Source§

fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>>

Returns Poll::Ready(Ok(())) when the service is able to process requests. Read more
Source§

fn call(&mut self, request: HttpRequestFactory) -> Self::Future

Process the request and return the response asynchronously. Read more
Source§

impl Service<HttpRequestFactory> for ReqwestService

Source§

type Response = Response

Responses given by the service.
Source§

type Error = OpenAIError

Errors produced by the service.
Source§

type Future = Pin<Box<dyn Future<Output = Result<Response, OpenAIError>> + Send>>

The future response value.
Source§

fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>>

Returns Poll::Ready(Ok(())) when the service is able to process requests. Read more
Source§

fn call(&mut self, request: HttpRequestFactory) -> Self::Future

Process the request and return the response asynchronously. 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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: 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: 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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
Source§

impl<T> MaybeSend for T
where T: Send,