35 lines
		
	
	
		
			721 B
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			721 B
		
	
	
	
		
			V
		
	
	
| 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
 | |
| mut:
 | |
| 	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
 | |
| 	}
 | |
| }
 |