Struct tower::util::BoxLayer [−][src]
pub struct BoxLayer<In, T, U, E> { /* fields omitted */ }This is supported on crate feature
util only.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
impl<In, T, U, E> Clone for BoxLayer<In, T, U, E>[src]
impl<In, T, U, E> Clone for BoxLayer<In, T, U, E>[src]fn clone(&self) -> Self[src]
pub fn clone_from(&mut self, source: &Self)1.0.0[src]
Auto Trait Implementations
impl<In, T, U, E> !RefUnwindSafe for BoxLayer<In, T, U, E>
impl<In, T, U, E> !RefUnwindSafe for BoxLayer<In, T, U, E>impl<In, T, U, E> !UnwindSafe for BoxLayer<In, T, U, E>
impl<In, T, U, E> !UnwindSafe for BoxLayer<In, T, U, E>Blanket Implementations
impl<T> Instrument for T[src]
impl<T> Instrument for T[src]pub fn instrument(self, span: Span) -> Instrumented<Self>[src]
pub fn in_current_span(self) -> Instrumented<Self>[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,