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 + Clone,
fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F> where
Self: Sized,
F: FnMut(NewRequest) -> Request + Clone,
Composes a function in front of the service. Read more
Composes an asynchronous function after this 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