pub struct BoxLayer<In, T, U, E> { /* private fields */ }Expand description
A boxed Layer trait object.
BoxLayer turns a layer into a trait object, allowing both the Layer itself
and the output Service to be dynamic, while having consistent types.
This Layer produces BoxService instances erasing the type of the
Service produced by the wrapped Layer.
Example
BoxLayer can, for example, be useful to create layers dynamically that otherwise wouldn’t have
the same types. In this example, we include a Timeout layer
only if an environment variable is set. We can use BoxLayer
to return a consistent type regardless of runtime configuration:
use std::time::Duration;
use tower::{Service, ServiceBuilder, BoxError, util::BoxLayer};
fn common_layer<S, T>() -> BoxLayer<S, T, S::Response, BoxError>
where
S: Service<T> + Send + 'static,
S::Future: Send + 'static,
S::Error: Into<BoxError> + 'static,
{
let builder = ServiceBuilder::new()
.concurrency_limit(100);
if std::env::var("SET_TIMEOUT").is_ok() {
let layer = builder
.timeout(Duration::from_secs(30))
.into_inner();
BoxLayer::new(layer)
} else {
let layer = builder
.map_err(Into::into)
.into_inner();
BoxLayer::new(layer)
}
}Implementations
Trait Implementations
Auto Trait Implementations
impl<In, T, U, E> !RefUnwindSafe for BoxLayer<In, T, U, E>
impl<In, T, U, E> Send for BoxLayer<In, T, U, E>
impl<In, T, U, E> Sync for BoxLayer<In, T, U, E>
impl<In, T, U, E> Unpin for BoxLayer<In, T, U, E>
impl<In, T, U, E> !UnwindSafe for BoxLayer<In, T, U, E>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Instruments this type with the provided Span, returning an
Instrumented wrapper. Read more