Skip to main content

HttpEngine

Struct HttpEngine 

Source
pub struct HttpEngine<A> { /* private fields */ }
Expand description

An HTTP transport for one tapes deployment, with the credential half left to an HttpAuth.

http is None only if the no-redirect client could not be built at all — in which case every request errors, rather than any fallback silently following redirects.

Implementations§

Source§

impl HttpEngine<NoAuth>

Source

pub fn new(base: Url) -> Self

Build an unauthenticated transport against base.

Source§

impl<A> HttpEngine<A>

Source

pub fn with_auth(base: Url, auth: A) -> Self

Build a transport against base, authorised by auth.

The join mode is PathMode::Direct; a deployment that mounts tapes under a gateway prefix adds HttpEngine::under_base.

Source

pub fn under_base(self) -> Self

Join contract paths under the base’s own prefix rather than at its root.

What a deployment that mounts tapes behind a gateway needs: a root-absolute join would send /v1/sessions to the edge root — a 404 at best, a wrong-gateway route at worst, and neither looks like a URL bug at the call site. The base must end in a slash.

Source

pub fn with_client(self, http: Client) -> Self

Send on the caller’s own client rather than the engine’s.

The injection point for a TLS policy, a proxy configuration, or a connection pool a consumer already holds. The per-response origin check still applies, so an injected client that follows redirects cannot walk a request onto another host unnoticed.

Source

pub fn base(&self) -> &Url

The base URL, for logging.

Source

pub fn auth(&self) -> &A

The credential hook this engine authorises with.

Source§

impl<A: HttpAuth> HttpEngine<A>

Source

pub async fn fetch_discovery(&self) -> Result<Value>

GET /v1/cassettes — the cassette discovery document, raw.

§Errors

Any transport, status, or decode failure; see crate::Error.

Source

pub async fn fetch_spec( &self, path: &str, etag: Option<&str>, ) -> Result<SpecFetch>

GET /v1/cassettes/{name}/openapi.json — one cassette’s own document.

path is the openapi_path discovery published rather than a path this client builds, so the server stays free to move the route; it is therefore untrusted, and refused unless it is plainly server-relative.

§Errors

Any transport, status, or decode failure; see crate::Error.

Source

pub async fn execute(&self, call: &Call<'_>) -> Result<Value>

Make one call described by an OpenAPI document and decode the JSON.

§Errors

Any transport, status, or decode failure; see crate::Error.

Source

pub async fn execute_stream(&self, call: &Call<'_>) -> Result<Response>

Make one described call and hand back the live response for streaming.

A non-success status is read and surfaced as Error::ApiStatus here, so a caller streaming to a file can never write an error page into it.

§Errors

Error::ApiStatus for any non-success answer, or the transport’s own failure.

Trait Implementations§

Source§

impl<A: Clone> Clone for HttpEngine<A>

Source§

fn clone(&self) -> HttpEngine<A>

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<A> Debug for HttpEngine<A>

Source§

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

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

impl<A: HttpAuth> SpecTransport for HttpEngine<A>

Source§

type Error = Error

The transport’s own error type.
Source§

async fn fetch_discovery(&self) -> Result<Value>

Fetch the /v1/cassettes discovery document, raw.
Source§

async fn fetch_spec(&self, path: &str, etag: Option<&str>) -> Result<SpecFetch>

Conditionally fetch one cassette’s OpenAPI document. Read more
Source§

async fn execute(&self, call: &Call<'_>) -> Result<Value>

Execute one described call and decode the JSON response.
Source§

impl<A: HttpAuth> StreamingTransport for HttpEngine<A>

Source§

type Body = Response

The streaming body this transport yields.
Source§

async fn send_stream(&self, request: &WireRequest<'_>) -> Result<Self::Body>

Send one described request and hand back the live response.
Source§

impl<A: HttpAuth> TapesTransport for HttpEngine<A>

Source§

async fn send( &self, request: &WireRequest<'_>, ) -> Result<WireResponse, TransportError>

Send one described request.

Auto Trait Implementations§

§

impl<A> !RefUnwindSafe for HttpEngine<A>

§

impl<A> !UnwindSafe for HttpEngine<A>

§

impl<A> Freeze for HttpEngine<A>
where A: Freeze,

§

impl<A> Send for HttpEngine<A>
where A: Send,

§

impl<A> Sync for HttpEngine<A>
where A: Sync,

§

impl<A> Unpin for HttpEngine<A>
where A: Unpin,

§

impl<A> UnsafeUnpin for HttpEngine<A>
where A: UnsafeUnpin,

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: 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> 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<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