First, let's take a look at the futures::Sink trait itself:
pub trait Sink {
type SinkItem;
type SinkError;
fn poll_ready(
&mut self,
cx: &mut Context
) -> Result<Async<()>, Self::SinkError>;
fn start_send(
&mut self,
item: Self::SinkItem
) -> Result<(), Self::SinkError>;
fn poll_flush(
&mut self,
cx: &mut Context
) -> Result<Async<()>, Self::SinkError>;
fn poll_close(
&mut self,
cx: &mut Context
) -> Result<Async<()>, Self::SinkError>;
}
We are already familiar with the Item and Error concepts from futures and streams, so we will move on to the required functions:
- poll_ready must be invoked with the returning value of Ok(futures::Async::Ready(())) before each attempt at using start_send. If the sink receives an error, the sink will no longer be able to receive items.
- start_send, as stated previously...