Skip to main content

Pipeline

Struct Pipeline 

Source
pub struct Pipeline(/* private fields */);
Expand description

Execution pipeline.

A pipeline follows a precise flow:

  1. Client library-specified per-call policies are executed. Per-call policies can fail and bail out of the pipeline immediately.
  2. User-specified per-call policies in ClientOptions::per_call_policies are executed.
  3. The retry policy is executed. It allows to re-execute the following policies.
  4. Client library-specified per-retry policies. Per-retry polices are always executed at least once but are re-executed in case of retries.
  5. User-specified per-retry policies in ClientOptions::per_try_policies are executed.
  6. The transport policy is executed. Transport policy is always the last policy and is the policy that actually constructs the AsyncRawResponse to be passed up the pipeline.

A pipeline is immutable. In other words a policy can either succeed and call the following policy of fail and return to the calling policy. Arbitrary policy “skip” must be avoided (but cannot be enforced by code). All policies except Transport policy can assume there is another following policy (so self.pipeline[0] is always valid).

Implementations§

Source§

impl Pipeline

Source

pub fn new( crate_name: Option<&'static str>, crate_version: Option<&'static str>, options: ClientOptions, per_call_policies: Vec<Arc<dyn Policy>>, per_try_policies: Vec<Arc<dyn Policy>>, pipeline_options: Option<PipelineOptions>, ) -> Self

Creates a new pipeline given the client library crate name and version, alone with user-specified and client library-specified policies.

Crates can simply pass option_env!("CARGO_PKG_NAME") and option_env!("CARGO_PKG_VERSION") for the crate_name and crate_version arguments respectively.

§Arguments
  • crate_name - The name of the crate implementing the client library.
  • crate_version - The version of the crate implementing the client library.
  • options - The client options.
  • per_call_policies - Policies to be executed per call, before the policies in ClientOptions::per_call_policies.
  • per_try_policies - Policies to be executed per try, before the policies in ClientOptions::per_try_policies.
  • pipeline_options - Additional options for the pipeline. If None, default options will be used.
Source

pub async fn send( &self, ctx: &Context<'_>, request: &mut Request, options: Option<PipelineSendOptions>, ) -> Result<RawResponse>

Sends a Request through each configured Policy to get a RawResponse that is processed by each policy in reverse.

§Arguments
  • ctx - The context for the Request.
  • request - The Request to send.
  • options - Options for sending the Request, including check success options. If none, check_success will not be called.
§Returns

A http::RawResponse if the request was successful, or an Error if it failed. If the response status code indicates an HTTP error, the function will attempt to parse the error response body into an ErrorResponse and include it in the Error.

Source

pub async fn stream( &self, ctx: &Context<'_>, request: &mut Request, options: Option<PipelineStreamOptions>, ) -> Result<AsyncRawResponse>

Sends a Request through each configured Policy to get a AsyncRawResponse that is processed by each policy in reverse.

§Arguments
  • ctx - The context for the Request.
  • request - The Request to send.
  • options - Options for sending the Request, including check success options. If none, check_success will not be called.
§Returns

A http::RawResponse if the request was successful, or an Error if it failed. If the response status code indicates an HTTP error, the function will attempt to parse the error response body into an ErrorResponse and include it in the Error.

Trait Implementations§

Source§

impl Clone for Pipeline

Source§

fn clone(&self) -> Pipeline

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 Pipeline

Source§

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

Formats the value using the given formatter. 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> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ServiceExt for T

Source§

fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>
where Self: Sized,

Apply a transformation to the response body. Read more
Source§

fn decompression(self) -> Decompression<Self>
where Self: Sized,

Decompress response bodies. Read more
Source§

fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>
where Self: Sized,

High level tracing that classifies responses using HTTP status codes. Read more
Source§

fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>
where Self: Sized,

High level tracing that classifies responses using gRPC headers. Read more
Source§

fn follow_redirects(self) -> FollowRedirect<Self>
where Self: Sized,

Follow redirect resposes using the Standard policy. 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 = !

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