use futures_core::{Stream, IntoFuture};
use futures_sink::Sink;
mod close;
mod fanout;
mod flush;
mod err_into;
mod map_err;
mod send;
mod send_all;
mod with;
mod with_flat_map;
if_std! {
mod buffer;
pub use self::buffer::Buffer;
}
pub use self::close::{Close, close};
pub use self::fanout::Fanout;
pub use self::flush::{Flush, flush};
pub use self::err_into::SinkErrInto;
pub use self::map_err::SinkMapErr;
pub use self::send::Send;
pub use self::send_all::SendAll;
pub use self::with::With;
pub use self::with_flat_map::WithFlatMap;
impl<T: ?Sized> SinkExt for T where T: Sink {}
pub trait SinkExt: Sink {
fn with<U, Fut, F>(self, f: F) -> With<Self, U, Fut, F>
where F: FnMut(U) -> Fut,
Fut: IntoFuture<Item = Self::SinkItem>,
Fut::Error: From<Self::SinkError>,
Self: Sized
{
with::new(self, f)
}
fn with_flat_map<U, St, F>(self, f: F) -> WithFlatMap<Self, U, St, F>
where F: FnMut(U) -> St,
St: Stream<Item = Self::SinkItem, Error=Self::SinkError>,
Self: Sized
{
with_flat_map::new(self, f)
}
fn sink_map_err<E, F>(self, f: F) -> SinkMapErr<Self, F>
where F: FnOnce(Self::SinkError) -> E,
Self: Sized,
{
map_err::new(self, f)
}
fn sink_err_into<E>(self) -> err_into::SinkErrInto<Self, E>
where Self: Sized,
Self::SinkError: Into<E>,
{
err_into::new(self)
}
#[cfg(feature = "std")]
fn buffer(self, amt: usize) -> Buffer<Self>
where Self: Sized
{
buffer::new(self, amt)
}
fn fanout<S>(self, other: S) -> Fanout<Self, S>
where Self: Sized,
Self::SinkItem: Clone,
S: Sink<SinkItem=Self::SinkItem, SinkError=Self::SinkError>
{
fanout::new(self, other)
}
fn send(self, item: Self::SinkItem) -> Send<Self>
where Self: Sized
{
send::new(self, item)
}
fn send_all<S>(self, stream: S) -> SendAll<Self, S>
where S: Stream<Item = Self::SinkItem>,
Self::SinkError: From<S::Error>,
Self: Sized
{
send_all::new(self, stream)
}
}