Struct tower::util::BoxCloneService
source · [−]pub struct BoxCloneService<T, U, E>(_);Expand description
BoxCloneService turns a service into a trait object, allowing the
response future type to be dynamic, and allowing the service to be cloned.
This is similar to BoxService except the resulting
service implements Clone.
Example
use tower::{Service, ServiceBuilder, BoxError, util::BoxCloneService};
use std::time::Duration;
// This service has a complex type that is hard to name
let service = ServiceBuilder::new()
.map_request(|req| {
println!("received request");
req
})
.map_response(|res| {
println!("response produced");
res
})
.load_shed()
.concurrency_limit(64)
.timeout(Duration::from_secs(10))
.service_fn(|req: Request| async {
Ok::<_, BoxError>(Response::new())
});
// `BoxCloneService` will erase the type so it's nameable
let service: BoxCloneService<Request, Response, BoxError> = BoxCloneService::new(service);
// And we can still clone the service
let cloned_service = service.clone();Implementations
Trait Implementations
sourceimpl<T, U, E> Clone for BoxCloneService<T, U, E>
impl<T, U, E> Clone for BoxCloneService<T, U, E>
sourceimpl<T, U, E> Debug for BoxCloneService<T, U, E>
impl<T, U, E> Debug for BoxCloneService<T, U, E>
sourceimpl<T, U, E> Service<T> for BoxCloneService<T, U, E>
impl<T, U, E> Service<T> for BoxCloneService<T, U, E>
type Response = U
type Response = U
Responses given by the service.
type Error = E
type Error = E
Errors produced by the service.
type Future = Pin<Box<dyn Future<Output = Result<U, E>> + Send + 'static, Global>>
type Future = Pin<Box<dyn Future<Output = Result<U, E>> + Send + 'static, Global>>
The future response value.
Auto Trait Implementations
impl<T, U, E> !RefUnwindSafe for BoxCloneService<T, U, E>
impl<T, U, E> Send for BoxCloneService<T, U, E>
impl<T, U, E> !Sync for BoxCloneService<T, U, E>
impl<T, U, E> Unpin for BoxCloneService<T, U, E>
impl<T, U, E> !UnwindSafe for BoxCloneService<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
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T, Request> ServiceExt<Request> for T where
T: Service<Request> + ?Sized,
impl<T, Request> ServiceExt<Request> for T where
T: Service<Request> + ?Sized,
sourcefn ready(&mut self) -> Ready<'_, Self, Request>ⓘNotable traits for Ready<'a, T, Request>impl<'a, T, Request> Future for Ready<'a, T, Request> where
T: Service<Request>, type Output = Result<&'a mut T, T::Error>; where
Self: Sized,
fn ready(&mut self) -> Ready<'_, Self, Request>ⓘNotable traits for Ready<'a, T, Request>impl<'a, T, Request> Future for Ready<'a, T, Request> where
T: Service<Request>, type Output = Result<&'a mut T, T::Error>; where
Self: Sized,
T: Service<Request>, type Output = Result<&'a mut T, T::Error>;
Yields a mutable reference to the service when it is ready to accept a request.
sourcefn ready_and(&mut self) -> ReadyAnd<'_, Self, Request> where
Self: Sized,
fn ready_and(&mut self) -> ReadyAnd<'_, Self, Request> where
Self: Sized,
please use the ServiceExt::ready method instead
Yields a mutable reference to the service when it is ready to accept a request.
sourcefn ready_oneshot(self) -> ReadyOneshot<Self, Request>ⓘNotable traits for ReadyOneshot<T, Request>impl<T, Request> Future for ReadyOneshot<T, Request> where
T: Service<Request>, type Output = Result<T, T::Error>; where
Self: Sized,
fn ready_oneshot(self) -> ReadyOneshot<Self, Request>ⓘNotable traits for ReadyOneshot<T, Request>impl<T, Request> Future for ReadyOneshot<T, Request> where
T: Service<Request>, type Output = Result<T, T::Error>; where
Self: Sized,
T: Service<Request>, type Output = Result<T, T::Error>;
Yields the service when it is ready to accept a request.
sourcefn oneshot(self, req: Request) -> Oneshot<Self, Request>ⓘNotable traits for Oneshot<S, Req>impl<S, Req> Future for Oneshot<S, Req> where
S: Service<Req>, type Output = Result<S::Response, S::Error>; where
Self: Sized,
fn oneshot(self, req: Request) -> Oneshot<Self, Request>ⓘNotable traits for Oneshot<S, Req>impl<S, Req> Future for Oneshot<S, Req> where
S: Service<Req>, type Output = Result<S::Response, S::Error>; where
Self: Sized,
S: Service<Req>, type Output = Result<S::Response, S::Error>;
Consume this Service, calling with the providing request once it is ready.
sourcefn call_all<S>(self, reqs: S) -> CallAll<Self, S> where
Self: Sized,
Self::Error: Into<BoxError>,
S: Stream<Item = Request>,
fn call_all<S>(self, reqs: S) -> CallAll<Self, S> where
Self: Sized,
Self::Error: Into<BoxError>,
S: Stream<Item = Request>,
sourcefn and_then<F>(self, f: F) -> AndThen<Self, F> where
Self: Sized,
F: Clone,
fn and_then<F>(self, f: F) -> AndThen<Self, F> where
Self: Sized,
F: Clone,
Executes a new future after this service’s future resolves. This does
not alter the behaviour of the poll_ready method. Read more
sourcefn map_response<F, Response>(self, f: F) -> MapResponse<Self, F> where
Self: Sized,
F: FnOnce(Self::Response) -> Response + Clone,
fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F> where
Self: Sized,
F: FnOnce(Self::Response) -> Response + Clone,
Maps this service’s response value to a different value. This does not
alter the behaviour of the poll_ready method. Read more
sourcefn map_err<F, Error>(self, f: F) -> MapErr<Self, F> where
Self: Sized,
F: FnOnce(Self::Error) -> Error + Clone,
fn map_err<F, Error>(self, f: F) -> MapErr<Self, F> where
Self: Sized,
F: FnOnce(Self::Error) -> Error + Clone,
Maps this service’s error value to a different value. This does not
alter the behaviour of the poll_ready method. Read more
sourcefn map_result<F, Response, Error>(self, f: F) -> MapResult<Self, F> where
Self: Sized,
Error: From<Self::Error>,
F: FnOnce(Result<Self::Response, Self::Error>) -> Result<Response, Error> + Clone,
fn map_result<F, Response, Error>(self, f: F) -> MapResult<Self, F> where
Self: Sized,
Error: From<Self::Error>,
F: FnOnce(Result<Self::Response, Self::Error>) -> Result<Response, Error> + Clone,
Maps this service’s result type (Result<Self::Response, Self::Error>)
to a different value, regardless of whether the future succeeds or
fails. Read more
sourcefn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F> where
Self: Sized,
F: FnMut(NewRequest) -> Request,
fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F> where
Self: Sized,
F: FnMut(NewRequest) -> Request,
Composes a function in front of the service. Read more
sourcefn then<F, Response, Error, Fut>(self, f: F) -> Then<Self, F> where
Self: Sized,
Error: From<Self::Error>,
F: FnOnce(Result<Self::Response, Self::Error>) -> Fut + Clone,
Fut: Future<Output = Result<Response, Error>>,
fn then<F, Response, Error, Fut>(self, f: F) -> Then<Self, F> where
Self: Sized,
Error: From<Self::Error>,
F: FnOnce(Result<Self::Response, Self::Error>) -> Fut + Clone,
Fut: Future<Output = Result<Response, Error>>,
Composes an asynchronous function after this service. Read more
sourcefn map_future<F, Fut, Response, Error>(self, f: F) -> MapFuture<Self, F> where
Self: Sized,
F: FnMut(Self::Future) -> Fut,
Error: From<Self::Error>,
Fut: Future<Output = Result<Response, Error>>,
fn map_future<F, Fut, Response, Error>(self, f: F) -> MapFuture<Self, F> where
Self: Sized,
F: FnMut(Self::Future) -> Fut,
Error: From<Self::Error>,
Fut: Future<Output = Result<Response, Error>>,
Composes a function that transforms futures produced by the service. Read more