futures-io 0.1.0

An I/O abstraction layer built on top of streams of readiness. Includes many std::io primitives intended for usage with futures.
use std::io;

use futures::Task;
use futures::stream::Stream;

use {ReadTask, WriteTask, Ready};

impl<R: ?Sized> ReadTask for R
    where R: io::Read + Stream<Item=Ready, Error=io::Error>,
{
    fn read(&mut self, _task: &mut Task, buf: &mut [u8]) -> io::Result<usize> {
        io::Read::read(self, buf)
    }

    fn read_to_end(&mut self,
                   _task: &mut Task,
                   buf: &mut Vec<u8>) -> io::Result<usize> {
        io::Read::read_to_end(self, buf)
    }
}

impl<W: ?Sized> WriteTask for W
    where W: io::Write + Stream<Item=Ready, Error=io::Error>,
{
    fn write(&mut self, _task: &mut Task, buf: &[u8]) -> io::Result<usize> {
        io::Write::write(self, buf)
    }

    fn flush(&mut self, _task: &mut Task) -> io::Result<()> {
        io::Write::flush(self)
    }
}