#[cfg(feature = "compat")]
use crate::compat::Compat;
use core::pin::Pin;
use futures_core::{
future::TryFuture,
stream::TryStream,
task::{Context, Poll},
};
#[cfg(feature = "sink")]
use futures_sink::Sink;
mod and_then;
#[allow(unreachable_pub)] pub use self::and_then::AndThen;
mod err_into;
#[allow(unreachable_pub)] pub use self::err_into::ErrInto;
#[cfg(feature = "sink")]
mod flatten_sink;
#[cfg(feature = "sink")]
#[allow(unreachable_pub)] pub use self::flatten_sink::FlattenSink;
mod inspect_ok;
#[allow(unreachable_pub)] pub use self::inspect_ok::InspectOk;
mod inspect_err;
#[allow(unreachable_pub)] pub use self::inspect_err::InspectErr;
mod into_future;
#[allow(unreachable_pub)] pub use self::into_future::IntoFuture;
mod map_err;
#[allow(unreachable_pub)] pub use self::map_err::MapErr;
mod map_ok;
#[allow(unreachable_pub)] pub use self::map_ok::MapOk;
mod map_ok_or_else;
#[allow(unreachable_pub)] pub use self::map_ok_or_else::MapOkOrElse;
mod or_else;
#[allow(unreachable_pub)] pub use self::or_else::OrElse;
mod try_flatten_stream;
#[allow(unreachable_pub)] pub use self::try_flatten_stream::TryFlattenStream;
mod unwrap_or_else;
#[allow(unreachable_pub)] pub use self::unwrap_or_else::UnwrapOrElse;
mod flatten_stream_sink;
pub(crate) use self::flatten_stream_sink::FlattenStreamSink;
mod try_chain;
pub(crate) use self::try_chain::{TryChain, TryChainAction};
impl<Fut: ?Sized + TryFuture> TryFutureExt for Fut {}
pub trait TryFutureExt: TryFuture {
#[cfg(feature = "sink")]
fn flatten_sink<Item>(self) -> FlattenSink<Self, Self::Ok>
where
Self::Ok: Sink<Item, Error = Self::Error>,
Self: Sized,
{
FlattenSink::new(self)
}
fn map_ok<T, F>(self, f: F) -> MapOk<Self, F>
where
F: FnOnce(Self::Ok) -> T,
Self: Sized,
{
MapOk::new(self, f)
}
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,
Self: Sized,
{
MapOkOrElse::new(self, e, f)
}
fn map_err<E, F>(self, f: F) -> MapErr<Self, F>
where
F: FnOnce(Self::Error) -> E,
Self: Sized,
{
MapErr::new(self, f)
}
fn err_into<E>(self) -> ErrInto<Self, E>
where
Self: Sized,
Self::Error: Into<E>,
{
ErrInto::new(self)
}
fn and_then<Fut, F>(self, f: F) -> AndThen<Self, Fut, F>
where
F: FnOnce(Self::Ok) -> Fut,
Fut: TryFuture<Error = Self::Error>,
Self: Sized,
{
AndThen::new(self, f)
}
fn or_else<Fut, F>(self, f: F) -> OrElse<Self, Fut, F>
where
F: FnOnce(Self::Error) -> Fut,
Fut: TryFuture<Ok = Self::Ok>,
Self: Sized,
{
OrElse::new(self, f)
}
fn inspect_ok<F>(self, f: F) -> InspectOk<Self, F>
where
F: FnOnce(&Self::Ok),
Self: Sized,
{
InspectOk::new(self, f)
}
fn inspect_err<F>(self, f: F) -> InspectErr<Self, F>
where
F: FnOnce(&Self::Error),
Self: Sized,
{
InspectErr::new(self, f)
}
fn try_flatten_stream(self) -> TryFlattenStream<Self>
where
Self::Ok: TryStream<Error = Self::Error>,
Self: Sized,
{
TryFlattenStream::new(self)
}
fn unwrap_or_else<F>(self, f: F) -> UnwrapOrElse<Self, F>
where
Self: Sized,
F: FnOnce(Self::Error) -> Self::Ok,
{
UnwrapOrElse::new(self, f)
}
#[cfg(feature = "compat")]
fn compat(self) -> Compat<Self>
where
Self: Sized + Unpin,
{
Compat::new(self)
}
fn into_future(self) -> IntoFuture<Self>
where
Self: Sized,
{
IntoFuture::new(self)
}
fn try_poll_unpin(&mut self, cx: &mut Context<'_>) -> Poll<Result<Self::Ok, Self::Error>>
where
Self: Unpin,
{
Pin::new(self).try_poll(cx)
}
}