| 1 | module io |
| 2 | |
| 3 | // ReaderWriter represents a stream that can be read and written. |
| 4 | pub interface ReaderWriter { |
| 5 | Reader |
| 6 | Writer |
| 7 | } |
| 8 | |
| 9 | // ReaderWriterImpl is a ReaderWriter that can be made from |
| 10 | // a separate reader and writer (see fn make_readerwriter). |
| 11 | struct ReaderWriterImpl { |
| 12 | mut: |
| 13 | r Reader |
| 14 | w Writer |
| 15 | } |
| 16 | |
| 17 | // read reads up to `buf.len` bytes into `buf`. It returns |
| 18 | // the number of bytes read or any error encountered. |
| 19 | pub fn (mut r ReaderWriterImpl) read(mut buf []u8) !int { |
| 20 | return r.r.read(mut buf) |
| 21 | } |
| 22 | |
| 23 | // write writes `buf.len` bytes from `buf` to the underlying |
| 24 | // data stream. It returns the number of bytes written or any error |
| 25 | // encountered. |
| 26 | pub fn (mut r ReaderWriterImpl) write(buf []u8) !int { |
| 27 | return r.w.write(buf) |
| 28 | } |
| 29 | |
| 30 | // make_readerwriter takes a rstream and a wstream and makes |
| 31 | // an rwstream with them. |
| 32 | pub fn make_readerwriter(r Reader, w Writer) ReaderWriterImpl { |
| 33 | return ReaderWriterImpl{ |
| 34 | r: r |
| 35 | w: w |
| 36 | } |
| 37 | } |
| 38 | |