module io // ReaderWriter represents a stream that can be read and written. pub interface ReaderWriter { Reader Writer } // ReaderWriterImpl is a ReaderWriter that can be made from // a separate reader and writer (see fn make_readerwriter). struct ReaderWriterImpl { mut: r Reader w Writer } // read reads up to `buf.len` bytes into `buf`. It returns // the number of bytes read or any error encountered. pub fn (mut r ReaderWriterImpl) read(mut buf []u8) !int { return r.r.read(mut buf) } // write writes `buf.len` bytes from `buf` to the underlying // data stream. It returns the number of bytes written or any error // encountered. pub fn (mut r ReaderWriterImpl) write(buf []u8) !int { return r.w.write(buf) } // make_readerwriter takes a rstream and a wstream and makes // an rwstream with them. pub fn make_readerwriter(r Reader, w Writer) ReaderWriterImpl { return ReaderWriterImpl{ r: r w: w } }