From fa44c7e35540be6516c506b753d030125ac3331a Mon Sep 17 00:00:00 2001
From: Stepan Koltsov <stepan.koltsov@gmail.com>
Date: Tue, 2 May 2017 21:28:12 +0300
Subject: [PATCH] BytesMut::extend_from_slice shortcut (#112)

Similar to `Vec::extend_from_slice`: it a reserve followed by
memcopy.
---
 src/bytes.rs | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/src/bytes.rs b/src/bytes.rs
index 6964ce1..e71d24b 100644
--- a/src/bytes.rs
+++ b/src/bytes.rs
@@ -1160,6 +1160,27 @@ impl BytesMut {
     pub fn reserve(&mut self, additional: usize) {
         self.inner.reserve(additional)
     }
+
+    /// Append given bytes to this object.
+    ///
+    /// If this `BytesMut` object has not enough capacity, it is resized first.
+    /// So unlike `put_slice` operation, `extend_from_slice` does not panic.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use bytes::BytesMut;
+    ///
+    /// let mut buf = BytesMut::with_capacity(0);
+    /// buf.extend_from_slice(b"aaabbb");
+    /// buf.extend_from_slice(b"cccddd");
+    ///
+    /// assert_eq!(b"aaabbbcccddd", &buf[..]);
+    /// ```
+    pub fn extend_from_slice(&mut self, extend: &[u8]) {
+        self.reserve(extend.len());
+        self.put_slice(extend);
+    }
 }
 
 impl BufMut for BytesMut {
-- 
GitLab