Enum futures_util::future::Either  
source · pub enum Either<A, B> {
    Left(A),
    Right(B),
}Expand description
Combines two different futures, streams, or sinks having the same associated types into a single type.
This is useful when conditionally choosing between two distinct future types:
use futures::future::Either;
let cond = true;
let fut = if cond {
    Either::Left(async move { 12 })
} else {
    Either::Right(async move { 44 })
};
assert_eq!(fut.await, 12);Variants§
Implementations§
source§impl<A, B, T> Either<(T, A), (T, B)>
 
impl<A, B, T> Either<(T, A), (T, B)>
sourcepub fn factor_first(self) -> (T, Either<A, B>)
 
pub fn factor_first(self) -> (T, Either<A, B>)
Factor out a homogeneous type from an either of pairs.
Here, the homogeneous type is the first element of the pairs.
source§impl<A, B, T> Either<(A, T), (B, T)>
 
impl<A, B, T> Either<(A, T), (B, T)>
sourcepub fn factor_second(self) -> (Either<A, B>, T)
 
pub fn factor_second(self) -> (Either<A, B>, T)
Factor out a homogeneous type from an either of pairs.
Here, the homogeneous type is the second element of the pairs.
source§impl<T> Either<T, T>
 
impl<T> Either<T, T>
sourcepub fn into_inner(self) -> T
 
pub fn into_inner(self) -> T
Extract the value of an either over two equivalent types.
Trait Implementations§
source§impl<A, B> AsyncBufRead for Either<A, B>where
    A: AsyncBufRead,
    B: AsyncBufRead,
 
impl<A, B> AsyncBufRead for Either<A, B>where
    A: AsyncBufRead,
    B: AsyncBufRead,
source§impl<A, B> AsyncRead for Either<A, B>where
    A: AsyncRead,
    B: AsyncRead,
 
impl<A, B> AsyncRead for Either<A, B>where
    A: AsyncRead,
    B: AsyncRead,
source§impl<A, B> AsyncWrite for Either<A, B>where
    A: AsyncWrite,
    B: AsyncWrite,
 
impl<A, B> AsyncWrite for Either<A, B>where
    A: AsyncWrite,
    B: AsyncWrite,
source§fn poll_write(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &[u8]
) -> Poll<Result<usize>>
 
fn poll_write(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &[u8]
) -> Poll<Result<usize>>
Attempt to write bytes from 
buf into the object. Read moresource§fn poll_write_vectored(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    bufs: &[IoSlice<'_>]
) -> Poll<Result<usize>>
 
fn poll_write_vectored(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    bufs: &[IoSlice<'_>]
) -> Poll<Result<usize>>
Attempt to write bytes from 
bufs into the object using vectored
IO operations. Read moresource§impl<A, B> FusedFuture for Either<A, B>where
    A: FusedFuture,
    B: FusedFuture<Output = A::Output>,
 
impl<A, B> FusedFuture for Either<A, B>where
    A: FusedFuture,
    B: FusedFuture<Output = A::Output>,
source§fn is_terminated(&self) -> bool
 
fn is_terminated(&self) -> bool
Returns 
true if the underlying future should no longer be polled.source§impl<A, B> FusedStream for Either<A, B>where
    A: FusedStream,
    B: FusedStream<Item = A::Item>,
 
impl<A, B> FusedStream for Either<A, B>where
    A: FusedStream,
    B: FusedStream<Item = A::Item>,
source§fn is_terminated(&self) -> bool
 
fn is_terminated(&self) -> bool
Returns 
true if the stream should no longer be polled.source§impl<A, B, Item> Sink<Item> for Either<A, B>where
    A: Sink<Item>,
    B: Sink<Item, Error = A::Error>,
 
impl<A, B, Item> Sink<Item> for Either<A, B>where
    A: Sink<Item>,
    B: Sink<Item, Error = A::Error>,
source§fn poll_ready(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>
) -> Poll<Result<(), Self::Error>>
 
fn poll_ready(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>
) -> Poll<Result<(), Self::Error>>
Attempts to prepare the 
Sink to receive a value. Read moresource§fn start_send(self: Pin<&mut Self>, item: Item) -> Result<(), Self::Error>
 
fn start_send(self: Pin<&mut Self>, item: Item) -> Result<(), Self::Error>
Begin the process of sending a value to the sink.
Each call to this function must be preceded by a successful call to
poll_ready which returned Poll::Ready(Ok(())). Read moresource§impl<A, B> Stream for Either<A, B>where
    A: Stream,
    B: Stream<Item = A::Item>,
 
impl<A, B> Stream for Either<A, B>where
    A: Stream,
    B: Stream<Item = A::Item>,
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> Unpin for Either<A, B>where
    A: Unpin,
    B: Unpin,
impl<A, B> UnwindSafe for Either<A, B>where
    A: UnwindSafe,
    B: UnwindSafe,
Blanket Implementations§
source§impl<R> AsyncBufReadExt for Rwhere
    R: AsyncBufRead + ?Sized,
 
impl<R> AsyncBufReadExt for Rwhere
    R: AsyncBufRead + ?Sized,
source§fn fill_buf(&mut self) -> FillBuf<'_, Self> ⓘwhere
    Self: Unpin,
 
fn fill_buf(&mut self) -> FillBuf<'_, Self> ⓘwhere
    Self: Unpin,
Creates a future which will wait for a non-empty buffer to be available from this I/O
object or EOF to be reached. Read more
source§fn consume_unpin(&mut self, amt: usize)where
    Self: Unpin,
 
fn consume_unpin(&mut self, amt: usize)where
    Self: Unpin,
source§fn read_until<'a>(
    &'a mut self,
    byte: u8,
    buf: &'a mut Vec<u8>
) -> ReadUntil<'a, Self> ⓘwhere
    Self: Unpin,
 
fn read_until<'a>(
    &'a mut self,
    byte: u8,
    buf: &'a mut Vec<u8>
) -> ReadUntil<'a, Self> ⓘwhere
    Self: Unpin,
Creates a future which will read all the bytes associated with this I/O
object into 
buf until the delimiter byte or EOF is reached.
This method is the async equivalent to BufRead::read_until. Read moresource§fn read_line<'a>(&'a mut self, buf: &'a mut String) -> ReadLine<'a, Self> ⓘwhere
    Self: Unpin,
 
fn read_line<'a>(&'a mut self, buf: &'a mut String) -> ReadLine<'a, Self> ⓘwhere
    Self: Unpin,
Creates a future which will read all the bytes associated with this I/O
object into 
buf until a newline (the 0xA byte) or EOF is reached,
This method is the async equivalent to BufRead::read_line. Read moresource§impl<R> AsyncReadExt for Rwhere
    R: AsyncRead + ?Sized,
 
impl<R> AsyncReadExt for Rwhere
    R: AsyncRead + ?Sized,
source§fn chain<R>(self, next: R) -> Chain<Self, R>where
    Self: Sized,
    R: AsyncRead,
 
fn chain<R>(self, next: R) -> Chain<Self, R>where
    Self: Sized,
    R: AsyncRead,
Creates an adaptor which will chain this stream with another. Read more
source§fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self> ⓘwhere
    Self: Unpin,
 
fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self> ⓘwhere
    Self: Unpin,
Tries to read some bytes directly into the given 
buf in asynchronous
manner, returning a future type. Read moresource§fn read_vectored<'a>(
    &'a mut self,
    bufs: &'a mut [IoSliceMut<'a>]
) -> ReadVectored<'a, Self> ⓘwhere
    Self: Unpin,
 
fn read_vectored<'a>(
    &'a mut self,
    bufs: &'a mut [IoSliceMut<'a>]
) -> ReadVectored<'a, Self> ⓘwhere
    Self: Unpin,
Creates a future which will read from the 
AsyncRead into bufs using vectored
IO operations. Read moresource§fn read_exact<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self> ⓘwhere
    Self: Unpin,
 
fn read_exact<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self> ⓘwhere
    Self: Unpin,
Creates a future which will read exactly enough bytes to fill 
buf,
returning an error if end of file (EOF) is hit sooner. Read moresource§fn read_to_end<'a>(&'a mut self, buf: &'a mut Vec<u8>) -> ReadToEnd<'a, Self> ⓘwhere
    Self: Unpin,
 
fn read_to_end<'a>(&'a mut self, buf: &'a mut Vec<u8>) -> ReadToEnd<'a, Self> ⓘwhere
    Self: Unpin,
Creates a future which will read all the bytes from this 
AsyncRead. Read moresource§fn read_to_string<'a>(
    &'a mut self,
    buf: &'a mut String
) -> ReadToString<'a, Self> ⓘwhere
    Self: Unpin,
 
fn read_to_string<'a>(
    &'a mut self,
    buf: &'a mut String
) -> ReadToString<'a, Self> ⓘwhere
    Self: Unpin,
Creates a future which will read all the bytes from this 
AsyncRead. Read moresource§impl<S> AsyncSeekExt for Swhere
    S: AsyncSeek + ?Sized,
 
impl<S> AsyncSeekExt for Swhere
    S: AsyncSeek + ?Sized,
source§impl<W> AsyncWriteExt for Wwhere
    W: AsyncWrite + ?Sized,
 
impl<W> AsyncWriteExt for Wwhere
    W: AsyncWrite + ?Sized,
source§fn flush(&mut self) -> Flush<'_, Self> ⓘwhere
    Self: Unpin,
 
fn flush(&mut self) -> Flush<'_, Self> ⓘwhere
    Self: Unpin,
Creates a future which will entirely flush this 
AsyncWrite. Read moresource§fn close(&mut self) -> Close<'_, Self> ⓘwhere
    Self: Unpin,
 
fn close(&mut self) -> Close<'_, Self> ⓘwhere
    Self: Unpin,
Creates a future which will entirely close this 
AsyncWrite.source§fn write<'a>(&'a mut self, buf: &'a [u8]) -> Write<'a, Self> ⓘwhere
    Self: Unpin,
 
fn write<'a>(&'a mut self, buf: &'a [u8]) -> Write<'a, Self> ⓘwhere
    Self: Unpin,
Creates a future which will write bytes from 
buf into the object. Read moresource§fn write_vectored<'a>(
    &'a mut self,
    bufs: &'a [IoSlice<'a>]
) -> WriteVectored<'a, Self> ⓘwhere
    Self: Unpin,
 
fn write_vectored<'a>(
    &'a mut self,
    bufs: &'a [IoSlice<'a>]
) -> WriteVectored<'a, Self> ⓘwhere
    Self: Unpin,
Creates a future which will write bytes from 
bufs into the object using vectored
IO operations. Read moresource§impl<F> IntoFuture for Fwhere
    F: Future,
 
impl<F> IntoFuture for Fwhere
    F: Future,
§type IntoFuture = F
 
type IntoFuture = F
Which kind of future are we turning this into?
source§fn into_future(self) -> <F as IntoFuture>::IntoFuture
 
fn into_future(self) -> <F as IntoFuture>::IntoFuture
Creates a future from a value. Read more
source§impl<T, Item> SinkExt<Item> for Twhere
    T: Sink<Item> + ?Sized,
 
impl<T, Item> SinkExt<Item> for Twhere
    T: Sink<Item> + ?Sized,
source§fn with<U, Fut, F, E>(self, f: F) -> With<Self, Item, U, Fut, F>where
    F: FnMut(U) -> Fut,
    Fut: Future<Output = Result<Item, E>>,
    E: From<Self::Error>,
    Self: Sized,
 
fn with<U, Fut, F, E>(self, f: F) -> With<Self, Item, U, Fut, F>where
    F: FnMut(U) -> Fut,
    Fut: Future<Output = Result<Item, E>>,
    E: From<Self::Error>,
    Self: Sized,
Composes a function in front of the sink. Read more
source§fn with_flat_map<U, St, F>(self, f: F) -> WithFlatMap<Self, Item, U, St, F>where
    F: FnMut(U) -> St,
    St: Stream<Item = Result<Item, Self::Error>>,
    Self: Sized,
 
fn with_flat_map<U, St, F>(self, f: F) -> WithFlatMap<Self, Item, U, St, F>where
    F: FnMut(U) -> St,
    St: Stream<Item = Result<Item, Self::Error>>,
    Self: Sized,
Composes a function in front of the sink. Read more
source§fn sink_map_err<E, F>(self, f: F) -> SinkMapErr<Self, F>where
    F: FnOnce(Self::Error) -> E,
    Self: Sized,
 
fn sink_map_err<E, F>(self, f: F) -> SinkMapErr<Self, F>where
    F: FnOnce(Self::Error) -> E,
    Self: Sized,
Transforms the error returned by the sink.
source§fn sink_err_into<E>(self) -> SinkErrInto<Self, Item, E>where
    Self: Sized,
    Self::Error: Into<E>,
 
fn sink_err_into<E>(self) -> SinkErrInto<Self, Item, E>where
    Self: Sized,
    Self::Error: Into<E>,
Map this sink’s error to a different error type using the 
Into trait. Read moresource§fn buffer(self, capacity: usize) -> Buffer<Self, Item>where
    Self: Sized,
 
fn buffer(self, capacity: usize) -> Buffer<Self, Item>where
    Self: Sized,
Adds a fixed-size buffer to the current sink. Read more
source§fn fanout<Si>(self, other: Si) -> Fanout<Self, Si>where
    Self: Sized,
    Item: Clone,
    Si: Sink<Item, Error = Self::Error>,
 
fn fanout<Si>(self, other: Si) -> Fanout<Self, Si>where
    Self: Sized,
    Item: Clone,
    Si: Sink<Item, Error = Self::Error>,
Fanout items to multiple sinks. Read more
source§fn flush(&mut self) -> Flush<'_, Self, Item> ⓘwhere
    Self: Unpin,
 
fn flush(&mut self) -> Flush<'_, Self, Item> ⓘwhere
    Self: Unpin,
Flush the sink, processing all pending items. Read more
source§fn send(&mut self, item: Item) -> Send<'_, Self, Item> ⓘwhere
    Self: Unpin,
 
fn send(&mut self, item: Item) -> Send<'_, Self, Item> ⓘwhere
    Self: Unpin,
A future that completes after the given item has been fully processed
into the sink, including flushing. Read more
source§fn feed(&mut self, item: Item) -> Feed<'_, Self, Item> ⓘwhere
    Self: Unpin,
 
fn feed(&mut self, item: Item) -> Feed<'_, Self, Item> ⓘwhere
    Self: Unpin,
A future that completes after the given item has been received
by the sink. Read more
source§fn send_all<'a, St>(&'a mut self, stream: &'a mut St) -> SendAll<'a, Self, St> ⓘwhere
    St: TryStream<Ok = Item, Error = Self::Error> + Stream + Unpin + ?Sized,
    Self: Unpin,
 
fn send_all<'a, St>(&'a mut self, stream: &'a mut St) -> SendAll<'a, Self, St> ⓘwhere
    St: TryStream<Ok = Item, Error = Self::Error> + Stream + Unpin + ?Sized,
    Self: Unpin,
A future that completes after the given stream has been fully processed
into the sink, including flushing. Read more
source§fn left_sink<Si2>(self) -> Either<Self, Si2> ⓘwhere
    Si2: Sink<Item, Error = Self::Error>,
    Self: Sized,
 
fn left_sink<Si2>(self) -> Either<Self, Si2> ⓘwhere
    Si2: Sink<Item, Error = Self::Error>,
    Self: Sized,
source§fn right_sink<Si1>(self) -> Either<Si1, Self> ⓘwhere
    Si1: Sink<Item, Error = Self::Error>,
    Self: Sized,
 
fn right_sink<Si1>(self) -> Either<Si1, Self> ⓘwhere
    Si1: Sink<Item, Error = Self::Error>,
    Self: Sized,
source§fn poll_ready_unpin(
    &mut self,
    cx: &mut Context<'_>
) -> Poll<Result<(), Self::Error>>where
    Self: Unpin,
 
fn poll_ready_unpin(
    &mut self,
    cx: &mut Context<'_>
) -> Poll<Result<(), Self::Error>>where
    Self: Unpin,
A convenience method for calling 
Sink::poll_ready on Unpin
sink types.source§fn start_send_unpin(&mut self, item: Item) -> Result<(), Self::Error>where
    Self: Unpin,
 
fn start_send_unpin(&mut self, item: Item) -> Result<(), Self::Error>where
    Self: Unpin,
A convenience method for calling 
Sink::start_send on Unpin
sink types.