v2 / vlib / io / readerwriter.v
37 lines · 32 sloc · 921 bytes · cdfc0bba9081099a0a6a62fcbbe7f364ba38231b
Raw
1module io
2
3// ReaderWriter represents a stream that can be read and written.
4pub 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).
11struct ReaderWriterImpl {
12mut:
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.
19pub 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.
26pub 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.
32pub fn make_readerwriter(r Reader, w Writer) ReaderWriterImpl {
33 return ReaderWriterImpl{
34 r: r
35 w: w
36 }
37}
38