From 7b63fa034fdd5b82c56d1b2ebcdc9877bcc0a69a Mon Sep 17 00:00:00 2001 From: Jamie Turner <jamwt@dropbox.com> Date: Thu, 2 Jul 2015 17:19:43 -0700 Subject: [PATCH] Add resume() method to ByteBuf that restores prior write position. --- src/buf/byte.rs | 8 ++++++++ test/test_byte_buf.rs | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/src/buf/byte.rs b/src/buf/byte.rs index 2fc77e6..aae272c 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 7557ddc..576bb0b 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"); } -- GitLab