use tower::ServiceBuilder;
#[cfg(feature = "trace")]
use crate::classify::{GrpcErrorsAsFailures, ServerErrorsAsFailures, SharedClassifier};
#[allow(unused_imports)]
use http::header::HeaderName;
#[allow(unused_imports)]
use tower_layer::Stack;
pub trait ServiceBuilderExt<L>: crate::sealed::Sealed<L> + Sized {
#[cfg(feature = "propagate-header")]
#[cfg_attr(docsrs, doc(cfg(feature = "propagate-header")))]
fn propagate_header(
self,
header: HeaderName,
) -> ServiceBuilder<Stack<crate::propagate_header::PropagateHeaderLayer, L>>;
#[cfg(feature = "add-extension")]
#[cfg_attr(docsrs, doc(cfg(feature = "add-extension")))]
fn add_extension<T>(
self,
value: T,
) -> ServiceBuilder<Stack<crate::add_extension::AddExtensionLayer<T>, L>>;
#[cfg(feature = "map-request-body")]
#[cfg_attr(docsrs, doc(cfg(feature = "map-request-body")))]
fn map_request_body<F>(
self,
f: F,
) -> ServiceBuilder<Stack<crate::map_request_body::MapRequestBodyLayer<F>, L>>;
#[cfg(feature = "map-response-body")]
#[cfg_attr(docsrs, doc(cfg(feature = "map-response-body")))]
fn map_response_body<F>(
self,
f: F,
) -> ServiceBuilder<Stack<crate::map_response_body::MapResponseBodyLayer<F>, L>>;
#[cfg(any(
feature = "compression-br",
feature = "compression-deflate",
feature = "compression-gzip"
))]
#[cfg_attr(
docsrs,
doc(cfg(any(
feature = "compression-br",
feature = "compression-deflate",
feature = "compression-gzip"
)))
)]
fn compression(self) -> ServiceBuilder<Stack<crate::compression::CompressionLayer, L>>;
#[cfg(any(
feature = "decompression-br",
feature = "decompression-deflate",
feature = "decompression-gzip"
))]
#[cfg_attr(
docsrs,
doc(cfg(any(
feature = "decompression-br",
feature = "decompression-deflate",
feature = "decompression-gzip"
)))
)]
fn decompression(self) -> ServiceBuilder<Stack<crate::decompression::DecompressionLayer, L>>;
#[cfg(feature = "trace")]
#[cfg_attr(docsrs, doc(cfg(feature = "trace")))]
fn trace_for_http(
self,
) -> ServiceBuilder<Stack<crate::trace::TraceLayer<SharedClassifier<ServerErrorsAsFailures>>, L>>;
#[cfg(feature = "trace")]
#[cfg_attr(docsrs, doc(cfg(feature = "trace")))]
fn trace_for_grpc(
self,
) -> ServiceBuilder<Stack<crate::trace::TraceLayer<SharedClassifier<GrpcErrorsAsFailures>>, L>>;
#[cfg(feature = "follow-redirect")]
#[cfg_attr(docsrs, doc(cfg(feature = "follow-redirect")))]
fn follow_redirects(
self,
) -> ServiceBuilder<
Stack<
crate::follow_redirect::FollowRedirectLayer<crate::follow_redirect::policy::Standard>,
L,
>,
>;
#[cfg(feature = "sensitive-headers")]
#[cfg_attr(docsrs, doc(cfg(feature = "sensitive-headers")))]
fn sensitive_headers<I>(
self,
headers: I,
) -> ServiceBuilder<Stack<crate::sensitive_headers::SetSensitiveHeadersLayer, L>>
where
I: IntoIterator<Item = HeaderName>;
#[cfg(feature = "sensitive-headers")]
#[cfg_attr(docsrs, doc(cfg(feature = "sensitive-headers")))]
fn sensitive_request_headers(
self,
headers: std::sync::Arc<[HeaderName]>,
) -> ServiceBuilder<Stack<crate::sensitive_headers::SetSensitiveRequestHeadersLayer, L>>;
#[cfg(feature = "sensitive-headers")]
#[cfg_attr(docsrs, doc(cfg(feature = "sensitive-headers")))]
fn sensitive_response_headers(
self,
headers: std::sync::Arc<[HeaderName]>,
) -> ServiceBuilder<Stack<crate::sensitive_headers::SetSensitiveResponseHeadersLayer, L>>;
#[cfg(feature = "set-header")]
#[cfg_attr(docsrs, doc(cfg(feature = "set-header")))]
fn override_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> ServiceBuilder<Stack<crate::set_header::SetRequestHeaderLayer<M>, L>>;
#[cfg(feature = "set-header")]
#[cfg_attr(docsrs, doc(cfg(feature = "set-header")))]
fn append_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> ServiceBuilder<Stack<crate::set_header::SetRequestHeaderLayer<M>, L>>;
#[cfg(feature = "set-header")]
#[cfg_attr(docsrs, doc(cfg(feature = "set-header")))]
fn insert_request_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> ServiceBuilder<Stack<crate::set_header::SetRequestHeaderLayer<M>, L>>;
#[cfg(feature = "set-header")]
#[cfg_attr(docsrs, doc(cfg(feature = "set-header")))]
fn override_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> ServiceBuilder<Stack<crate::set_header::SetResponseHeaderLayer<M>, L>>;
#[cfg(feature = "set-header")]
#[cfg_attr(docsrs, doc(cfg(feature = "set-header")))]
fn append_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> ServiceBuilder<Stack<crate::set_header::SetResponseHeaderLayer<M>, L>>;
#[cfg(feature = "set-header")]
#[cfg_attr(docsrs, doc(cfg(feature = "set-header")))]
fn insert_response_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> ServiceBuilder<Stack<crate::set_header::SetResponseHeaderLayer<M>, L>>;
#[cfg(feature = "request-id")]
#[cfg_attr(docsrs, doc(cfg(feature = "request-id")))]
fn set_request_id<M>(
self,
header_name: HeaderName,
make_request_id: M,
) -> ServiceBuilder<Stack<crate::request_id::SetRequestIdLayer<M>, L>>
where
M: crate::request_id::MakeRequestId;
#[cfg(feature = "request-id")]
#[cfg_attr(docsrs, doc(cfg(feature = "request-id")))]
fn set_x_request_id<M>(
self,
make_request_id: M,
) -> ServiceBuilder<Stack<crate::request_id::SetRequestIdLayer<M>, L>>
where
M: crate::request_id::MakeRequestId,
{
self.set_request_id(
HeaderName::from_static(crate::request_id::X_REQUEST_ID),
make_request_id,
)
}
#[cfg(feature = "request-id")]
#[cfg_attr(docsrs, doc(cfg(feature = "request-id")))]
fn propagate_request_id(
self,
header_name: HeaderName,
) -> ServiceBuilder<Stack<crate::request_id::PropagateRequestIdLayer, L>>;
#[cfg(feature = "request-id")]
#[cfg_attr(docsrs, doc(cfg(feature = "request-id")))]
fn propagate_x_request_id(
self,
) -> ServiceBuilder<Stack<crate::request_id::PropagateRequestIdLayer, L>> {
self.propagate_request_id(HeaderName::from_static(crate::request_id::X_REQUEST_ID))
}
#[cfg(feature = "catch-panic")]
#[cfg_attr(docsrs, doc(cfg(feature = "catch-panic")))]
fn catch_panic(
self,
) -> ServiceBuilder<
Stack<crate::catch_panic::CatchPanicLayer<crate::catch_panic::DefaultResponseForPanic>, L>,
>;
}
impl<L> crate::sealed::Sealed<L> for ServiceBuilder<L> {}
impl<L> ServiceBuilderExt<L> for ServiceBuilder<L> {
#[cfg(feature = "propagate-header")]
fn propagate_header(
self,
header: HeaderName,
) -> ServiceBuilder<Stack<crate::propagate_header::PropagateHeaderLayer, L>> {
self.layer(crate::propagate_header::PropagateHeaderLayer::new(header))
}
#[cfg(feature = "add-extension")]
fn add_extension<T>(
self,
value: T,
) -> ServiceBuilder<Stack<crate::add_extension::AddExtensionLayer<T>, L>> {
self.layer(crate::add_extension::AddExtensionLayer::new(value))
}
#[cfg(feature = "map-request-body")]
fn map_request_body<F>(
self,
f: F,
) -> ServiceBuilder<Stack<crate::map_request_body::MapRequestBodyLayer<F>, L>> {
self.layer(crate::map_request_body::MapRequestBodyLayer::new(f))
}
#[cfg(feature = "map-response-body")]
fn map_response_body<F>(
self,
f: F,
) -> ServiceBuilder<Stack<crate::map_response_body::MapResponseBodyLayer<F>, L>> {
self.layer(crate::map_response_body::MapResponseBodyLayer::new(f))
}
#[cfg(any(
feature = "compression-br",
feature = "compression-deflate",
feature = "compression-gzip"
))]
#[cfg_attr(
docsrs,
doc(cfg(any(
feature = "compression-br",
feature = "compression-deflate",
feature = "compression-gzip"
)))
)]
fn compression(self) -> ServiceBuilder<Stack<crate::compression::CompressionLayer, L>> {
self.layer(crate::compression::CompressionLayer::new())
}
#[cfg(any(
feature = "decompression-br",
feature = "decompression-deflate",
feature = "decompression-gzip"
))]
#[cfg_attr(
docsrs,
doc(cfg(any(
feature = "decompression-br",
feature = "decompression-deflate",
feature = "decompression-gzip"
)))
)]
fn decompression(self) -> ServiceBuilder<Stack<crate::decompression::DecompressionLayer, L>> {
self.layer(crate::decompression::DecompressionLayer::new())
}
#[cfg(feature = "trace")]
fn trace_for_http(
self,
) -> ServiceBuilder<Stack<crate::trace::TraceLayer<SharedClassifier<ServerErrorsAsFailures>>, L>>
{
self.layer(crate::trace::TraceLayer::new_for_http())
}
#[cfg(feature = "trace")]
fn trace_for_grpc(
self,
) -> ServiceBuilder<Stack<crate::trace::TraceLayer<SharedClassifier<GrpcErrorsAsFailures>>, L>>
{
self.layer(crate::trace::TraceLayer::new_for_grpc())
}
#[cfg(feature = "follow-redirect")]
#[cfg_attr(docsrs, doc(cfg(feature = "follow-redirect")))]
fn follow_redirects(
self,
) -> ServiceBuilder<
Stack<
crate::follow_redirect::FollowRedirectLayer<crate::follow_redirect::policy::Standard>,
L,
>,
> {
self.layer(crate::follow_redirect::FollowRedirectLayer::new())
}
#[cfg(feature = "sensitive-headers")]
fn sensitive_headers<I>(
self,
headers: I,
) -> ServiceBuilder<Stack<crate::sensitive_headers::SetSensitiveHeadersLayer, L>>
where
I: IntoIterator<Item = HeaderName>,
{
self.layer(crate::sensitive_headers::SetSensitiveHeadersLayer::new(
headers,
))
}
#[cfg(feature = "sensitive-headers")]
fn sensitive_request_headers(
self,
headers: std::sync::Arc<[HeaderName]>,
) -> ServiceBuilder<Stack<crate::sensitive_headers::SetSensitiveRequestHeadersLayer, L>> {
self.layer(crate::sensitive_headers::SetSensitiveRequestHeadersLayer::from_shared(headers))
}
#[cfg(feature = "sensitive-headers")]
fn sensitive_response_headers(
self,
headers: std::sync::Arc<[HeaderName]>,
) -> ServiceBuilder<Stack<crate::sensitive_headers::SetSensitiveResponseHeadersLayer, L>> {
self.layer(crate::sensitive_headers::SetSensitiveResponseHeadersLayer::from_shared(headers))
}
#[cfg(feature = "set-header")]
fn override_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> ServiceBuilder<Stack<crate::set_header::SetRequestHeaderLayer<M>, L>> {
self.layer(crate::set_header::SetRequestHeaderLayer::overriding(
header_name,
make,
))
}
#[cfg(feature = "set-header")]
fn append_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> ServiceBuilder<Stack<crate::set_header::SetRequestHeaderLayer<M>, L>> {
self.layer(crate::set_header::SetRequestHeaderLayer::appending(
header_name,
make,
))
}
#[cfg(feature = "set-header")]
fn insert_request_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> ServiceBuilder<Stack<crate::set_header::SetRequestHeaderLayer<M>, L>> {
self.layer(crate::set_header::SetRequestHeaderLayer::if_not_present(
header_name,
make,
))
}
#[cfg(feature = "set-header")]
fn override_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> ServiceBuilder<Stack<crate::set_header::SetResponseHeaderLayer<M>, L>> {
self.layer(crate::set_header::SetResponseHeaderLayer::overriding(
header_name,
make,
))
}
#[cfg(feature = "set-header")]
fn append_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> ServiceBuilder<Stack<crate::set_header::SetResponseHeaderLayer<M>, L>> {
self.layer(crate::set_header::SetResponseHeaderLayer::appending(
header_name,
make,
))
}
#[cfg(feature = "set-header")]
fn insert_response_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> ServiceBuilder<Stack<crate::set_header::SetResponseHeaderLayer<M>, L>> {
self.layer(crate::set_header::SetResponseHeaderLayer::if_not_present(
header_name,
make,
))
}
#[cfg(feature = "request-id")]
fn set_request_id<M>(
self,
header_name: HeaderName,
make_request_id: M,
) -> ServiceBuilder<Stack<crate::request_id::SetRequestIdLayer<M>, L>>
where
M: crate::request_id::MakeRequestId,
{
self.layer(crate::request_id::SetRequestIdLayer::new(
header_name,
make_request_id,
))
}
#[cfg(feature = "request-id")]
fn propagate_request_id(
self,
header_name: HeaderName,
) -> ServiceBuilder<Stack<crate::request_id::PropagateRequestIdLayer, L>> {
self.layer(crate::request_id::PropagateRequestIdLayer::new(header_name))
}
#[cfg(feature = "catch-panic")]
#[cfg_attr(docsrs, doc(cfg(feature = "catch-panic")))]
fn catch_panic(
self,
) -> ServiceBuilder<
Stack<crate::catch_panic::CatchPanicLayer<crate::catch_panic::DefaultResponseForPanic>, L>,
> {
self.layer(crate::catch_panic::CatchPanicLayer::new())
}
}