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