module io // ReaderWriter represents a stream that can be read from and wrote to pub interface ReaderWriter { // from Reader read(mut buf []byte) ?int // from Writer write(buf []byte) ?int } // ReaderWriterImpl is a ReaderWriter that can be made from // a seperate reader and writer (see fn make_readerwriter) struct ReaderWriterImpl { r Reader w Writer } pub fn (mut r ReaderWriterImpl) read(mut buf []byte) ?int { return r.r.read(mut buf) } pub fn (mut r ReaderWriterImpl) write(buf []byte) ?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 {r: r, w: w} } struct Zzz_CoerceInterfaceTableGeneration { } fn (_ Zzz_CoerceInterfaceTableGeneration) write(buf []byte) ?int { } fn (_ Zzz_CoerceInterfaceTableGeneration) read(mut buf []byte) ?int { } fn zzz_reader_writer_coerce_compiler() { x := Zzz_CoerceInterfaceTableGeneration{} _ := make_readerwriter(x, x) }