Trait ServiceBuilderExt

Source
pub trait ServiceBuilderExt<L>: Sealed<L> + Sized {
    // Required methods
    fn trace_for_http(
        self,
    ) -> ServiceBuilder<Stack<TraceLayer<HttpMakeClassifier>, L>>;
    fn trace_for_grpc(
        self,
    ) -> ServiceBuilder<Stack<TraceLayer<GrpcMakeClassifier>, L>>;
    fn override_request_header<M>(
        self,
        header_name: HeaderName,
        make: M,
    ) -> ServiceBuilder<Stack<SetRequestHeaderLayer<M>, L>>;
    fn append_request_header<M>(
        self,
        header_name: HeaderName,
        make: M,
    ) -> ServiceBuilder<Stack<SetRequestHeaderLayer<M>, L>>;
    fn insert_request_header_if_not_present<M>(
        self,
        header_name: HeaderName,
        make: M,
    ) -> ServiceBuilder<Stack<SetRequestHeaderLayer<M>, L>>;
    fn override_response_header<M>(
        self,
        header_name: HeaderName,
        make: M,
    ) -> ServiceBuilder<Stack<SetResponseHeaderLayer<M>, L>>;
    fn append_response_header<M>(
        self,
        header_name: HeaderName,
        make: M,
    ) -> ServiceBuilder<Stack<SetResponseHeaderLayer<M>, L>>;
    fn insert_response_header_if_not_present<M>(
        self,
        header_name: HeaderName,
        make: M,
    ) -> ServiceBuilder<Stack<SetResponseHeaderLayer<M>, L>>;
    fn set_request_id<M>(
        self,
        header_name: HeaderName,
        make_request_id: M,
    ) -> ServiceBuilder<Stack<SetRequestIdLayer<M>, L>>
       where M: MakeRequestId;
    fn propagate_request_id(
        self,
        header_name: HeaderName,
    ) -> ServiceBuilder<Stack<PropagateRequestIdLayer, L>>;

    // Provided methods
    fn set_x_request_id<M>(
        self,
        make_request_id: M,
    ) -> ServiceBuilder<Stack<SetRequestIdLayer<M>, L>>
       where M: MakeRequestId { ... }
    fn propagate_x_request_id(
        self,
    ) -> ServiceBuilder<Stack<PropagateRequestIdLayer, L>> { ... }
}
Expand description

Extension trait that adds methods to tower::ServiceBuilder for adding middleware from tower-http.

§Example

use http::{Request, Response, header::HeaderName};
use bytes::Bytes;
use http_body_util::Full;
use std::{time::Duration, convert::Infallible};
use tower::{ServiceBuilder, ServiceExt, Service};
use tower_http::ServiceBuilderExt;

async fn handle(request: Request<Full<Bytes>>) -> Result<Response<Full<Bytes>>, Infallible> {
    Ok(Response::new(Full::default()))
}

let service = ServiceBuilder::new()
    // Methods from tower
    .timeout(Duration::from_secs(30))
    // Methods from tower-http
    .trace_for_http()
    .propagate_header(HeaderName::from_static("x-request-id"))
    .service_fn(handle);

Required Methods§

Source

fn trace_for_http( self, ) -> ServiceBuilder<Stack<TraceLayer<HttpMakeClassifier>, L>>

High level tracing that classifies responses using HTTP status codes.

This method does not support customizing the output, to do that use TraceLayer instead.

See tower_http::trace for more details.

Source

fn trace_for_grpc( self, ) -> ServiceBuilder<Stack<TraceLayer<GrpcMakeClassifier>, L>>

High level tracing that classifies responses using gRPC headers.

This method does not support customizing the output, to do that use TraceLayer instead.

See tower_http::trace for more details.

Source

fn override_request_header<M>( self, header_name: HeaderName, make: M, ) -> ServiceBuilder<Stack<SetRequestHeaderLayer<M>, L>>

Insert a header into the request.

If a previous value exists for the same header, it is removed and replaced with the new header value.

See tower_http::set_header for more details.

Source

fn append_request_header<M>( self, header_name: HeaderName, make: M, ) -> ServiceBuilder<Stack<SetRequestHeaderLayer<M>, L>>

Append a header into the request.

If previous values exist, the header will have multiple values.

See tower_http::set_header for more details.

Source

fn insert_request_header_if_not_present<M>( self, header_name: HeaderName, make: M, ) -> ServiceBuilder<Stack<SetRequestHeaderLayer<M>, L>>

Insert a header into the request, if the header is not already present.

See tower_http::set_header for more details.

Source

fn override_response_header<M>( self, header_name: HeaderName, make: M, ) -> ServiceBuilder<Stack<SetResponseHeaderLayer<M>, L>>

Insert a header into the response.

If a previous value exists for the same header, it is removed and replaced with the new header value.

See tower_http::set_header for more details.

Source

fn append_response_header<M>( self, header_name: HeaderName, make: M, ) -> ServiceBuilder<Stack<SetResponseHeaderLayer<M>, L>>

Append a header into the response.

If previous values exist, the header will have multiple values.

See tower_http::set_header for more details.

Source

fn insert_response_header_if_not_present<M>( self, header_name: HeaderName, make: M, ) -> ServiceBuilder<Stack<SetResponseHeaderLayer<M>, L>>

Insert a header into the response, if the header is not already present.

See tower_http::set_header for more details.

Source

fn set_request_id<M>( self, header_name: HeaderName, make_request_id: M, ) -> ServiceBuilder<Stack<SetRequestIdLayer<M>, L>>
where M: MakeRequestId,

Add request id header and extension.

See tower_http::request_id for more details.

Source

fn propagate_request_id( self, header_name: HeaderName, ) -> ServiceBuilder<Stack<PropagateRequestIdLayer, L>>

Propgate request ids from requests to responses.

See tower_http::request_id for more details.

Provided Methods§

Source

fn set_x_request_id<M>( self, make_request_id: M, ) -> ServiceBuilder<Stack<SetRequestIdLayer<M>, L>>
where M: MakeRequestId,

Add request id header and extension, using x-request-id as the header name.

See tower_http::request_id for more details.

Source

fn propagate_x_request_id( self, ) -> ServiceBuilder<Stack<PropagateRequestIdLayer, L>>

Propgate request ids from requests to responses, using x-request-id as the header name.

See tower_http::request_id for more details.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<L> ServiceBuilderExt<L> for ServiceBuilder<L>

Implementors§