pub struct BoxLayer<In, T, U, E> { /* private fields */ }
Available on crate feature
util
only.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> Freeze for BoxLayer<In, T, U, E>
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§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)