pub struct Steer<S, F, Req> { /* private fields */ }
steer
only.Expand description
Steer
manages a list of Service
s which all handle the same type of request.
An example use case is a sharded service. It accepts new requests, then:
- Determines, via the provided
Picker
, whichService
the request coresponds to. - Waits (in
Service::poll_ready
) for all services to be ready. - Calls the correct
Service
with the request, and returns a future corresponding to the call.
Note that Steer
must wait for all services to be ready since it can’t know ahead of time
which Service
the next message will arrive for, and is unwilling to buffer items
indefinitely. This will cause head-of-line blocking unless paired with a Service
that does
buffer items indefinitely, and thus always returns Poll::Ready
. For example, wrapping each
component service with a Buffer
with a high enough limit (the maximum number of concurrent
requests) will prevent head-of-line blocking in Steer
.
Implementations
sourceimpl<S, F, Req> Steer<S, F, Req>
impl<S, F, Req> Steer<S, F, Req>
sourcepub fn new(services: impl IntoIterator<Item = S>, router: F) -> Self
pub fn new(services: impl IntoIterator<Item = S>, router: F) -> Self
Make a new Steer
with a list of Service
’s and a Picker
.
Note: the order of the Service
’s is significant for Picker::pick
’s return value.
Trait Implementations
Auto Trait Implementations
impl<S, F, Req> RefUnwindSafe for Steer<S, F, Req> where
F: RefUnwindSafe,
Req: RefUnwindSafe,
S: RefUnwindSafe,
impl<S, F, Req> Send for Steer<S, F, Req> where
F: Send,
Req: Send,
S: Send,
impl<S, F, Req> Sync for Steer<S, F, Req> where
F: Sync,
Req: Sync,
S: Sync,
impl<S, F, Req> Unpin for Steer<S, F, Req> where
F: Unpin,
Req: Unpin,
S: Unpin,
impl<S, F, Req> UnwindSafe for Steer<S, F, Req> where
F: UnwindSafe,
Req: UnwindSafe,
S: UnwindSafe,
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>
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>;
util
only.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
util
only.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>;
util
only.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>;
util
only.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>,
util
only.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,
util
only.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,
util
only.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,
util
only.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,
util
only.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,
util
only.Composes a function in front of the service. Read more
sourcefn filter<F, NewRequest>(self, filter: F) -> Filter<Self, F> where
Self: Sized,
F: Predicate<NewRequest>,
fn filter<F, NewRequest>(self, filter: F) -> Filter<Self, F> where
Self: Sized,
F: Predicate<NewRequest>,
util
and filter
only.sourcefn filter_async<F, NewRequest>(self, filter: F) -> AsyncFilter<Self, F> where
Self: Sized,
F: AsyncPredicate<NewRequest>,
fn filter_async<F, NewRequest>(self, filter: F) -> AsyncFilter<Self, F> where
Self: Sized,
F: AsyncPredicate<NewRequest>,
util
and filter
only.Composes this service with an AsyncFilter
that conditionally accepts or
rejects requests based on an [async predicate]. 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>>,
util
only.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>>,
util
only.Composes a function that transforms futures produced by the service. Read more
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more