Struct tower::util::FutureService [−][src]
pub struct FutureService<F, S> { /* fields omitted */ }Expand description
A type that implements Service for a Future that produces a Service.
See future_service for more details.
Implementations
Returns a new FutureService for the given future.
A FutureService allows you to treat a future that resolves to a service as a service. This
can be useful for services that are created asynchronously.
Example
use tower::{service_fn, Service, ServiceExt};
use tower::util::FutureService;
use std::convert::Infallible;
// A future which outputs a type implementing `Service`.
let future_of_a_service = async {
let svc = service_fn(|_req: ()| async { Ok::<_, Infallible>("ok") });
Ok::<_, Infallible>(svc)
};
// Wrap the future with a `FutureService`, allowing it to be used
// as a service without awaiting the future's completion:
let mut svc = FutureService::new(Box::pin(future_of_a_service));
// Now, when we wait for the service to become ready, it will
// drive the future to completion internally.
let svc = svc.ready().await.unwrap();
let res = svc.call(()).await.unwrap();Regarding the Unpin bound
The Unpin bound on F is necessary because the future will be polled in
Service::poll_ready which doesn’t have a pinned receiver (it takes &mut self and not self: Pin<&mut Self>). So we cannot put the future into a Pin without requiring Unpin.
This will most likely come up if you’re calling future_service with an async block. In that
case you can use Box::pin(async { ... }) as shown in the example.
Trait Implementations
Auto Trait Implementations
impl<F, S> RefUnwindSafe for FutureService<F, S> where
F: RefUnwindSafe,
S: RefUnwindSafe,
impl<F, S> Send for FutureService<F, S> where
F: Send,
S: Send,
impl<F, S> Sync for FutureService<F, S> where
F: Sync,
S: Sync,
impl<F, S> Unpin for FutureService<F, S> where
F: Unpin,
S: Unpin,
impl<F, S> UnwindSafe for FutureService<F, S> where
F: UnwindSafe,
S: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
Yields a mutable reference to the service when it is ready to accept a request.
please use the ServiceExt::ready method instead
Yields a mutable reference to the service when it is ready to accept a request.
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,
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,
impl<T, Request> Future for ReadyOneshot<T, Request> where
T: Service<Request>, type Output = Result<T, T::Error>;Yields the service when it is ready to accept a request.
Consume this Service, calling with the providing request once it is ready.
Executes a new future after this service’s future resolves. This does
not alter the behaviour of the poll_ready method. Read more
fn 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
Maps this service’s error value to a different value. This does not
alter the behaviour of the poll_ready method. Read more
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
fn 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
Composes an asynchronous function after this service. Read more
Composes a function that transforms futures produced by the service. Read more
Attaches the provided Subscriber to this type, returning a
WithDispatch wrapper. Read more
Attaches the current default Subscriber to this type, returning a
WithDispatch wrapper. Read more
