diff --git a/src/ring.rs b/src/ring.rs index fe29db49a38f5a0431bbed5c1b1cada89019953b..4f9fdb9022135aa3c23ee66acfcdee2ac5076542 100644 --- a/src/ring.rs +++ b/src/ring.rs @@ -1,6 +1,7 @@ use super::{Buf, MutBuf}; use std::{cmp, fmt, mem, ptr, slice}; use std::rt::heap; +use std::io; /// Buf backed by a continous chunk of memory. Maintains a read cursor and a /// write cursor. When reads and writes reach the end of the allocated buffer, @@ -184,4 +185,28 @@ impl MutBuf for RingBuf { } } +impl io::Read for RingBuf { + fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> { + if !MutBuf::has_remaining(self) { + return Ok(0); + } + + Ok(self.read_slice(buf)) + } +} + +impl io::Write for RingBuf { + fn write(&mut self, buf: &[u8]) -> io::Result<usize> { + if !Buf::has_remaining(self) { + return Ok(0); + } + + Ok(self.write_slice(buf)) + } + + fn flush(&mut self) -> io::Result<()> { + Ok(()) + } +} + unsafe impl Send for RingBuf { }