1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
//! This crate provides `AsyncRead` and `AsyncWrite` implementations for //! `Stream` and `Sink` instances over byte buffers. //! //! The `StreamRead` and `SinkWrite` types may be used like so: //! //! ``` //! extern crate bytes; //! extern crate futures; //! extern crate tokio_io; //! extern crate lz_stream_io; //! //! use futures::{Future, Stream, Sink}; //! use futures::unsync::mpsc; //! use std::io::{Result as IoResult, ErrorKind as IoErrorKind}; //! use bytes::Bytes; //! use tokio_io::io as async_io; //! use lz_stream_io::{SinkWrite, StreamRead}; //! //! fn main() { //! // The sink item type must implement From<&[u8]> //! // The stream item type must implement AsRef<[u8]> //! let (sink, stream) = mpsc::unbounded::<Bytes>(); //! //! // Both sink and stream must have an error type which std::io::Error //! // can be created from //! let sink = sink.sink_map_err(|_| IoErrorKind::InvalidData); //! let stream = stream.map_err(|_| IoErrorKind::InvalidData); //! //! let write = SinkWrite::new(sink); //! let read = StreamRead::new(stream); //! //! async_io::write_all(write, b"hello") //! .and_then(|(write, _)| async_io::write_all(write, b" world")) //! .and_then(|_| async_io::read_to_end(read, vec![])) //! .and_then(|(_, bytes)| { //! assert_eq!(bytes, b"hello world"); //! Ok(()) //! }).wait().unwrap(); //! } //! //! ``` extern crate bytes; extern crate futures; extern crate tokio_io; mod stream_read; pub use stream_read::StreamRead; mod sink_write; pub use sink_write::SinkWrite;