pub enum Either<A, B> {
A(A),
B(B),
}
Expand description
Combine two different service types into a single type.
Both services must be of the same request, response, and error types.
Either
is useful for handling conditional branching in service middleware
to different inner service types.
Variants
A(A)
One type of backing Service
.
B(B)
The other type of backing Service
.
Trait Implementations
sourceimpl<A: Clone, B: Clone> Clone for Either<A, B>
impl<A: Clone, B: Clone> Clone for Either<A, B>
sourcefn clone(&self) -> Either<A, B>ⓘNotable traits for Either<A, B>impl<A, B, T, AE, BE> Future for Either<A, B>where
A: Future<Output = Result<T, AE>>,
AE: Into<BoxError>,
B: Future<Output = Result<T, BE>>,
BE: Into<BoxError>, type Output = Result<T, BoxError>;
fn clone(&self) -> Either<A, B>ⓘNotable traits for Either<A, B>impl<A, B, T, AE, BE> Future for Either<A, B>where
A: Future<Output = Result<T, AE>>,
AE: Into<BoxError>,
B: Future<Output = Result<T, BE>>,
BE: Into<BoxError>, type Output = Result<T, BoxError>;
A: Future<Output = Result<T, AE>>,
AE: Into<BoxError>,
B: Future<Output = Result<T, BE>>,
BE: Into<BoxError>, type Output = Result<T, BoxError>;
Returns a copy of the value. Read more
1.0.0const fn clone_from(&mut self, source: &Self)
const fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresourceimpl<A, B, T, AE, BE> Future for Either<A, B>where
A: Future<Output = Result<T, AE>>,
AE: Into<BoxError>,
B: Future<Output = Result<T, BE>>,
BE: Into<BoxError>,
impl<A, B, T, AE, BE> Future for Either<A, B>where
A: Future<Output = Result<T, AE>>,
AE: Into<BoxError>,
B: Future<Output = Result<T, BE>>,
BE: Into<BoxError>,
type Output = Result<T, Box<dyn Error + Sync + Send + 'static, Global>>
type Output = Result<T, Box<dyn Error + Sync + Send + 'static, Global>>
The type of value produced on completion.
sourceimpl<A, B, Request> Service<Request> for Either<A, B>where
A: Service<Request>,
A::Error: Into<BoxError>,
B: Service<Request, Response = A::Response>,
B::Error: Into<BoxError>,
impl<A, B, Request> Service<Request> for Either<A, B>where
A: Service<Request>,
A::Error: Into<BoxError>,
B: Service<Request, Response = A::Response>,
B::Error: Into<BoxError>,
type Error = Box<dyn Error + Sync + Send + 'static, Global>
type Error = Box<dyn Error + Sync + Send + 'static, Global>
Errors produced by the service.
type Future = Either<<A as Service<Request>>::Future, <B as Service<Request>>::Future>
type Future = Either<<A as Service<Request>>::Future, <B as Service<Request>>::Future>
The future response value.
sourcefn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>>
fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>>
Returns
Poll::Ready(Ok(()))
when the service is able to process requests. Read moreimpl<'pin, A, B> Unpin for Either<A, B>where
__Either<'pin, A, B>: Unpin,
Auto Trait Implementations
impl<A, B> RefUnwindSafe for Either<A, B>where
A: RefUnwindSafe,
B: RefUnwindSafe,
impl<A, B> Send for Either<A, B>where
A: Send,
B: Send,
impl<A, B> Sync for Either<A, B>where
A: Sync,
B: Sync,
impl<A, B> UnwindSafe for Either<A, B>where
A: UnwindSafe,
B: UnwindSafe,
Blanket Implementations
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstablefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> FutureExt for Twhere
T: Future + ?Sized,
impl<T> FutureExt for Twhere
T: Future + ?Sized,
sourcefn map<U, F>(self, f: F) -> Map<Self, F>where
F: FnOnce(Self::Output) -> U,
fn map<U, F>(self, f: F) -> Map<Self, F>where
F: FnOnce(Self::Output) -> U,
Map this future’s output to a different type, returning a new future of
the resulting type. Read more
sourcefn map_into<U>(self) -> MapInto<Self, U>where
Self::Output: Into<U>,
fn map_into<U>(self) -> MapInto<Self, U>where
Self::Output: Into<U>,
Map this future’s output to a different type, returning a new future of
the resulting type. Read more
sourcefn then<Fut, F>(self, f: F) -> Then<Self, Fut, F>where
F: FnOnce(Self::Output) -> Fut,
Fut: Future,
fn then<Fut, F>(self, f: F) -> Then<Self, Fut, F>where
F: FnOnce(Self::Output) -> Fut,
Fut: Future,
Chain on a computation for when a future finished, passing the result of
the future to the provided closure
f
. Read moresourcefn left_future<B>(self) -> Either<Self, B>where
B: Future<Output = Self::Output>,
fn left_future<B>(self) -> Either<Self, B>where
B: Future<Output = Self::Output>,
sourcefn right_future<A>(self) -> Either<A, Self>where
A: Future<Output = Self::Output>,
fn right_future<A>(self) -> Either<A, Self>where
A: Future<Output = Self::Output>,
sourcefn into_stream(self) -> IntoStream<Self>
fn into_stream(self) -> IntoStream<Self>
Convert this future into a single element stream. Read more
sourcefn flatten(self) -> Flatten<Self>where
Self::Output: Future,
fn flatten(self) -> Flatten<Self>where
Self::Output: Future,
Flatten the execution of this future when the output of this
future is itself another future. Read more
sourcefn flatten_stream(self) -> FlattenStream<Self>where
Self::Output: Stream,
fn flatten_stream(self) -> FlattenStream<Self>where
Self::Output: Stream,
Flatten the execution of this future when the successful result of this
future is a stream. Read more
sourcefn fuse(self) -> Fuse<Self>
fn fuse(self) -> Fuse<Self>
Fuse a future such that
poll
will never again be called once it has
completed. This method can be used to turn any Future
into a
FusedFuture
. Read moresourcefn inspect<F>(self, f: F) -> Inspect<Self, F>where
F: FnOnce(&Self::Output),
fn inspect<F>(self, f: F) -> Inspect<Self, F>where
F: FnOnce(&Self::Output),
Do something with the output of a future before passing it on. Read more
sourcefn catch_unwind(self) -> CatchUnwind<Self>where
Self: UnwindSafe,
fn catch_unwind(self) -> CatchUnwind<Self>where
Self: UnwindSafe,
Catches unwinding panics while polling the future. Read more
Create a cloneable handle to this future where all handles will resolve
to the same result. Read more
sourcefn remote_handle(self) -> (Remote<Self>, RemoteHandle<Self::Output>)
fn remote_handle(self) -> (Remote<Self>, RemoteHandle<Self::Output>)
Turn this future into a future that yields
()
on completion and sends
its output to another future on a separate task. Read moresourcefn boxed<'a>(
self
) -> Pin<Box<dyn Future<Output = Self::Output> + Send + 'a, Global>>where
Self: 'a + Send,
fn boxed<'a>(
self
) -> Pin<Box<dyn Future<Output = Self::Output> + Send + 'a, Global>>where
Self: 'a + Send,
Wrap the future in a Box, pinning it. Read more
sourcefn boxed_local<'a>(
self
) -> Pin<Box<dyn Future<Output = Self::Output> + 'a, Global>>where
Self: 'a,
fn boxed_local<'a>(
self
) -> Pin<Box<dyn Future<Output = Self::Output> + 'a, Global>>where
Self: 'a,
Wrap the future in a Box, pinning it. Read more
sourcefn unit_error(self) -> UnitError<Self>
fn unit_error(self) -> UnitError<Self>
sourcefn never_error(self) -> NeverError<Self>
fn never_error(self) -> NeverError<Self>
sourcefn poll_unpin(&mut self, cx: &mut Context<'_>) -> Poll<Self::Output>where
Self: Unpin,
fn poll_unpin(&mut self, cx: &mut Context<'_>) -> Poll<Self::Output>where
Self: Unpin,
A convenience for calling
Future::poll
on Unpin
future types.sourcefn now_or_never(self) -> Option<Self::Output>
fn now_or_never(self) -> Option<Self::Output>
Evaluates and consumes the future, returning the resulting output if
the future is ready after the first call to
Future::poll
. Read moresourceimpl<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>
impl<F> IntoFuture for Fwhere
F: Future,
impl<F> IntoFuture for Fwhere
F: Future,
type Output = <F as Future>::Output
type Output = <F as Future>::Output
The output that the future will produce on completion.
type IntoFuture = F
type IntoFuture = F
Which kind of future are we turning this into?
fn into_future(self) -> <F as IntoFuture>::IntoFuture
fn into_future(self) -> <F as IntoFuture>::IntoFuture
Creates a future from a value. Read more
sourceimpl<T, Request> ServiceExt<Request> for Twhere
T: Service<Request> + ?Sized,
impl<T, Request> ServiceExt<Request> for Twhere
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,
👎Deprecated since 0.4.6: please use the
ServiceExt::ready
method insteadYields 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 moresourcefn 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 moresourcefn 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 moresourcefn 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 moresourcefn 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
sourcefn boxed(self) -> BoxService<Request, Self::Response, Self::Error>where
Self: Sized + Send + 'static,
Self::Future: Send + 'static,
fn boxed(self) -> BoxService<Request, Self::Response, Self::Error>where
Self: Sized + Send + 'static,
Self::Future: Send + 'static,
sourcefn boxed_clone(self) -> BoxCloneService<Request, Self::Response, Self::Error>where
Self: Clone + Sized + Send + 'static,
Self::Future: Send + 'static,
fn boxed_clone(self) -> BoxCloneService<Request, Self::Response, Self::Error>where
Self: Clone + Sized + Send + 'static,
Self::Future: Send + 'static,
impl<T> ToOwned for Twhere
T: Clone,
impl<T> ToOwned for Twhere
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
fn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
Uses borrowed data to replace owned data, usually by cloning. Read more
sourceimpl<Fut> TryFutureExt for Futwhere
Fut: TryFuture + ?Sized,
impl<Fut> TryFutureExt for Futwhere
Fut: TryFuture + ?Sized,
sourcefn flatten_sink<Item>(self) -> FlattenSink<Self, Self::Ok>where
Self::Ok: Sink<Item, Error = Self::Error>,
fn flatten_sink<Item>(self) -> FlattenSink<Self, Self::Ok>where
Self::Ok: Sink<Item, Error = Self::Error>,
sourcefn map_ok<T, F>(self, f: F) -> MapOk<Self, F>where
F: FnOnce(Self::Ok) -> T,
fn map_ok<T, F>(self, f: F) -> MapOk<Self, F>where
F: FnOnce(Self::Ok) -> T,
Maps this future’s success value to a different value. Read more
sourcefn map_ok_or_else<T, E, F>(self, e: E, f: F) -> MapOkOrElse<Self, F, E>where
F: FnOnce(Self::Ok) -> T,
E: FnOnce(Self::Error) -> T,
fn map_ok_or_else<T, E, F>(self, e: E, f: F) -> MapOkOrElse<Self, F, E>where
F: FnOnce(Self::Ok) -> T,
E: FnOnce(Self::Error) -> T,
Maps this future’s success value to a different value, and permits for error handling resulting in the same type. Read more
sourcefn map_err<E, F>(self, f: F) -> MapErr<Self, F>where
F: FnOnce(Self::Error) -> E,
fn map_err<E, F>(self, f: F) -> MapErr<Self, F>where
F: FnOnce(Self::Error) -> E,
Maps this future’s error value to a different value. Read more
sourcefn and_then<Fut, F>(self, f: F) -> AndThen<Self, Fut, F>where
F: FnOnce(Self::Ok) -> Fut,
Fut: TryFuture<Error = Self::Error>,
fn and_then<Fut, F>(self, f: F) -> AndThen<Self, Fut, F>where
F: FnOnce(Self::Ok) -> Fut,
Fut: TryFuture<Error = Self::Error>,
Executes another future after this one resolves successfully. The
success value is passed to a closure to create this subsequent future. Read more
sourcefn or_else<Fut, F>(self, f: F) -> OrElse<Self, Fut, F>where
F: FnOnce(Self::Error) -> Fut,
Fut: TryFuture<Ok = Self::Ok>,
fn or_else<Fut, F>(self, f: F) -> OrElse<Self, Fut, F>where
F: FnOnce(Self::Error) -> Fut,
Fut: TryFuture<Ok = Self::Ok>,
Executes another future if this one resolves to an error. The
error value is passed to a closure to create this subsequent future. Read more
sourcefn inspect_ok<F>(self, f: F) -> InspectOk<Self, F>where
F: FnOnce(&Self::Ok),
fn inspect_ok<F>(self, f: F) -> InspectOk<Self, F>where
F: FnOnce(&Self::Ok),
Do something with the success value of a future before passing it on. Read more
sourcefn inspect_err<F>(self, f: F) -> InspectErr<Self, F>where
F: FnOnce(&Self::Error),
fn inspect_err<F>(self, f: F) -> InspectErr<Self, F>where
F: FnOnce(&Self::Error),
Do something with the error value of a future before passing it on. Read more
sourcefn try_flatten(self) -> TryFlatten<Self, Self::Ok>where
Self::Ok: TryFuture<Error = Self::Error>,
fn try_flatten(self) -> TryFlatten<Self, Self::Ok>where
Self::Ok: TryFuture<Error = Self::Error>,
Flatten the execution of this future when the successful result of this
future is another future. Read more
sourcefn try_flatten_stream(self) -> TryFlattenStream<Self>where
Self::Ok: TryStream<Error = Self::Error>,
fn try_flatten_stream(self) -> TryFlattenStream<Self>where
Self::Ok: TryStream<Error = Self::Error>,
Flatten the execution of this future when the successful result of this
future is a stream. Read more