use {IntoFuture, Poll, StartSend};
use stream::Stream;
mod with;
mod flush;
mod send;
mod send_all;
if_std! {
mod buffer;
pub use self::buffer::Buffer;
impl<T> Sink for ::std::vec::Vec<T> {
type SinkItem = T;
type SinkError = ();
fn start_send(&mut self, item: Self::SinkItem)
-> StartSend<Self::SinkItem, Self::SinkError>
{
self.push(item);
Ok(::AsyncSink::Ready)
}
fn poll_complete(&mut self) -> Poll<(), Self::SinkError> {
Ok(::Async::Ready(()))
}
}
pub type BoxSink<T, E> = ::std::boxed::Box<Sink<SinkItem = T, SinkError = E> +
::core::marker::Send>;
impl<S: ?Sized + Sink> Sink for ::std::boxed::Box<S> {
type SinkItem = S::SinkItem;
type SinkError = S::SinkError;
fn start_send(&mut self, item: Self::SinkItem)
-> StartSend<Self::SinkItem, Self::SinkError> {
(**self).start_send(item)
}
fn poll_complete(&mut self) -> Poll<(), Self::SinkError> {
(**self).poll_complete()
}
}
}
pub use self::with::With;
pub use self::flush::Flush;
pub use self::send::Send;
pub use self::send_all::SendAll;
pub trait Sink {
type SinkItem;
type SinkError;
fn start_send(&mut self, item: Self::SinkItem)
-> StartSend<Self::SinkItem, Self::SinkError>;
fn poll_complete(&mut self) -> Poll<(), Self::SinkError>;
fn with<U, F, Fut>(self, f: F) -> With<Self, U, F, Fut>
where F: FnMut(U) -> Fut,
Fut: IntoFuture<Item = Self::SinkItem>,
Fut::Error: From<Self::SinkError>,
Self: Sized
{
with::new(self, f)
}
#[cfg(feature = "use_std")]
fn buffer(self, amt: usize) -> Buffer<Self>
where Self: Sized
{
buffer::new(self, amt)
}
fn flush(self) -> Flush<Self>
where Self: Sized
{
flush::new(self)
}
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)
}
}
impl<'a, S: ?Sized + Sink> Sink for &'a mut S {
type SinkItem = S::SinkItem;
type SinkError = S::SinkError;
fn start_send(&mut self, item: Self::SinkItem)
-> StartSend<Self::SinkItem, Self::SinkError> {
(**self).start_send(item)
}
fn poll_complete(&mut self) -> Poll<(), Self::SinkError> {
(**self).poll_complete()
}
}