Skip to main content

ServiceBuilderExt

Trait ServiceBuilderExt 

Source
pub trait ServiceBuilderExt<L>: Sized + Sealed<L> {
Show 26 methods // Required methods fn propagate_header( self, header: HeaderName, ) -> ServiceBuilder<Stack<PropagateHeaderLayer, L>>; fn add_extension<T>( self, value: T, ) -> ServiceBuilder<Stack<AddExtensionLayer<T>, L>>; fn map_request_body<F>( self, f: F, ) -> ServiceBuilder<Stack<MapRequestBodyLayer<F>, L>>; fn map_response_body<F>( self, f: F, ) -> ServiceBuilder<Stack<MapResponseBodyLayer<F>, L>>; fn compression(self) -> ServiceBuilder<Stack<CompressionLayer, L>>; fn decompression(self) -> ServiceBuilder<Stack<DecompressionLayer, L>>; fn trace_for_http( self, ) -> ServiceBuilder<Stack<TraceLayer<SharedClassifier<ServerErrorsAsFailures>>, L>>; fn trace_for_grpc( self, ) -> ServiceBuilder<Stack<TraceLayer<SharedClassifier<GrpcErrorsAsFailures>>, L>>; fn follow_redirects(self) -> ServiceBuilder<Stack<FollowRedirectLayer, L>>; fn sensitive_headers<I>( self, headers: I, ) -> ServiceBuilder<Stack<SetSensitiveHeadersLayer, L>> where I: IntoIterator<Item = HeaderName>; fn sensitive_request_headers( self, headers: Arc<[HeaderName]>, ) -> ServiceBuilder<Stack<SetSensitiveRequestHeadersLayer, L>>; fn sensitive_response_headers( self, headers: Arc<[HeaderName]>, ) -> ServiceBuilder<Stack<SetSensitiveResponseHeadersLayer, 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>>; fn catch_panic( self, ) -> ServiceBuilder<Stack<CatchPanicLayer<DefaultResponseForPanic>, L>>; fn request_body_limit( self, limit: usize, ) -> ServiceBuilder<Stack<RequestBodyLimitLayer, L>>; fn trim_trailing_slash(self) -> ServiceBuilder<Stack<NormalizePathLayer, L>>; fn append_trailing_slash( self, ) -> ServiceBuilder<Stack<NormalizePathLayer, 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 propagate_header( self, header: HeaderName, ) -> ServiceBuilder<Stack<PropagateHeaderLayer, L>>

Propagate a header from the request to the response.

See tower_http::propagate_header for more details.

Source

fn add_extension<T>( self, value: T, ) -> ServiceBuilder<Stack<AddExtensionLayer<T>, L>>

Add some shareable value to request extensions.

See tower_http::add_extension for more details.

Source

fn map_request_body<F>( self, f: F, ) -> ServiceBuilder<Stack<MapRequestBodyLayer<F>, L>>

Apply a transformation to the request body.

See tower_http::map_request_body for more details.

Source

fn map_response_body<F>( self, f: F, ) -> ServiceBuilder<Stack<MapResponseBodyLayer<F>, L>>

Apply a transformation to the response body.

See tower_http::map_response_body for more details.

Source

fn compression(self) -> ServiceBuilder<Stack<CompressionLayer, L>>

Compresses response bodies.

See tower_http::compression for more details.

Source

fn decompression(self) -> ServiceBuilder<Stack<DecompressionLayer, L>>

Decompress response bodies.

See tower_http::decompression for more details.

Source

fn trace_for_http( self, ) -> ServiceBuilder<Stack<TraceLayer<SharedClassifier<ServerErrorsAsFailures>>, 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<SharedClassifier<GrpcErrorsAsFailures>>, 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 follow_redirects(self) -> ServiceBuilder<Stack<FollowRedirectLayer, L>>

Follow redirect resposes using the Standard policy.

See tower_http::follow_redirect for more details.

Source

fn sensitive_headers<I>( self, headers: I, ) -> ServiceBuilder<Stack<SetSensitiveHeadersLayer, L>>
where I: IntoIterator<Item = HeaderName>,

Mark headers as sensitive on both requests and responses.

See tower_http::sensitive_headers for more details.

Source

fn sensitive_request_headers( self, headers: Arc<[HeaderName]>, ) -> ServiceBuilder<Stack<SetSensitiveRequestHeadersLayer, L>>

Mark headers as sensitive on requests.

See tower_http::sensitive_headers for more details.

Source

fn sensitive_response_headers( self, headers: Arc<[HeaderName]>, ) -> ServiceBuilder<Stack<SetSensitiveResponseHeadersLayer, L>>

Mark headers as sensitive on responses.

See tower_http::sensitive_headers 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.

Source

fn catch_panic( self, ) -> ServiceBuilder<Stack<CatchPanicLayer<DefaultResponseForPanic>, L>>

Catch panics and convert them into 500 Internal Server responses.

See tower_http::catch_panic for more details.

Source

fn request_body_limit( self, limit: usize, ) -> ServiceBuilder<Stack<RequestBodyLimitLayer, L>>

Intercept requests with over-sized payloads and convert them into 413 Payload Too Large responses.

See tower_http::limit for more details.

Source

fn trim_trailing_slash(self) -> ServiceBuilder<Stack<NormalizePathLayer, L>>

Remove trailing slashes from paths.

See tower_http::normalize_path for more details.

Source

fn append_trailing_slash(self) -> ServiceBuilder<Stack<NormalizePathLayer, L>>

Append trailing slash to paths.

See tower_http::normalize_path 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".

Implementations on Foreign Types§

Source§

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

Source§

fn propagate_header( self, header: HeaderName, ) -> ServiceBuilder<Stack<PropagateHeaderLayer, L>>

Source§

fn add_extension<T>( self, value: T, ) -> ServiceBuilder<Stack<AddExtensionLayer<T>, L>>

Source§

fn map_request_body<F>( self, f: F, ) -> ServiceBuilder<Stack<MapRequestBodyLayer<F>, L>>

Source§

fn map_response_body<F>( self, f: F, ) -> ServiceBuilder<Stack<MapResponseBodyLayer<F>, L>>

Source§

fn compression(self) -> ServiceBuilder<Stack<CompressionLayer, L>>

Source§

fn decompression(self) -> ServiceBuilder<Stack<DecompressionLayer, L>>

Source§

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

Source§

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

Source§

fn follow_redirects(self) -> ServiceBuilder<Stack<FollowRedirectLayer, L>>

Source§

fn sensitive_headers<I>( self, headers: I, ) -> ServiceBuilder<Stack<SetSensitiveHeadersLayer, L>>
where I: IntoIterator<Item = HeaderName>,

Source§

fn sensitive_request_headers( self, headers: Arc<[HeaderName]>, ) -> ServiceBuilder<Stack<SetSensitiveRequestHeadersLayer, L>>

Source§

fn sensitive_response_headers( self, headers: Arc<[HeaderName]>, ) -> ServiceBuilder<Stack<SetSensitiveResponseHeadersLayer, L>>

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

fn catch_panic( self, ) -> ServiceBuilder<Stack<CatchPanicLayer<DefaultResponseForPanic>, L>>

Source§

fn request_body_limit( self, limit: usize, ) -> ServiceBuilder<Stack<RequestBodyLimitLayer, L>>

Source§

fn trim_trailing_slash(self) -> ServiceBuilder<Stack<NormalizePathLayer, L>>

Source§

fn append_trailing_slash(self) -> ServiceBuilder<Stack<NormalizePathLayer, L>>

Implementors§