diff --git a/src/buf/byte.rs b/src/buf/byte.rs index 2fc77e647e28e4c56e7d68ee86bf9c3c79f00335..aae272cba0e985fe7ca19e443933268d1333209e 100644 --- a/src/buf/byte.rs +++ b/src/buf/byte.rs @@ -88,6 +88,14 @@ impl ByteBuf { buf } + /// Flips the buffer back to mutable, resetting the write position + /// to the byte after the previous write. + pub fn resume(mut self) -> MutByteBuf { + self.pos = self.lim; + self.lim = self.cap; + MutByteBuf { buf: self } + } + pub fn read_slice(&mut self, dst: &mut [u8]) -> usize { let len = cmp::min(dst.len(), self.remaining()); let cnt = len as u32; diff --git a/test/test_byte_buf.rs b/test/test_byte_buf.rs index 7557ddcad019f9a5ed3c9a60cbad2803e9862368..576bb0bb5569705c904c840ebe959cb6da23bf36 100644 --- a/test/test_byte_buf.rs +++ b/test/test_byte_buf.rs @@ -47,4 +47,13 @@ pub fn test_byte_buf_read_write() { let mut dst = [0; 7]; assert_eq!(7, buf.read(&mut dst[..]).unwrap()); assert_eq!(b"goodbye", &dst); + + let mut buf = buf.resume(); + assert_eq!(13, buf.remaining()); + + buf.write(&b" have fun"[..]).unwrap(); + assert_eq!(4, buf.remaining()); + + let buf = buf.flip(); + assert_eq!(buf.bytes(), b"hello world goodbye have fun"); }