Struct tower::util::BoxLayer [−][src]
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
impl<In, T, U, E> BoxLayer<In, T, U, E>
[src]
pub fn new<L>(inner_layer: L) -> Self where
L: Layer<In> + Send + Sync + 'static,
L::Service: Service<T, Response = U, Error = E> + Send + 'static,
<L::Service as Service<T>>::Future: Send + 'static,
[src]
L: Layer<In> + Send + Sync + 'static,
L::Service: Service<T, Response = U, Error = E> + Send + 'static,
<L::Service as Service<T>>::Future: Send + 'static,
Create a new BoxLayer
.
Trait Implementations
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]
impl<In, T, U, E> Debug for BoxLayer<In, T, U, E>
[src]
impl<In, T, U, E> Layer<In> for BoxLayer<In, T, U, E>
[src]
type Service = BoxService<T, U, E>
The wrapped service
fn layer(&self, inner: In) -> Self::Service
[src]
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
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> 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<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,