From d19c929018fd241fcfc8377708efb20ec6949a77 Mon Sep 17 00:00:00 2001
From: Alex Crichton <alex@alexcrichton.com>
Date: Wed, 1 Mar 2017 10:37:30 -0800
Subject: [PATCH] Expand object-safe impls slightly

Add `?Sized` bounds to work for DST objects and also add impls for `Box` as well
as `&mut`
---
 src/buf/mod.rs | 32 ++++++++++++++++++++++++++++++--
 1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/src/buf/mod.rs b/src/buf/mod.rs
index cfff1e8..93bbcc6 100644
--- a/src/buf/mod.rs
+++ b/src/buf/mod.rs
@@ -42,7 +42,7 @@ pub use self::writer::Writer;
  *
  */
 
-impl<'a, T: Buf> Buf for &'a mut T {
+impl<'a, T: Buf + ?Sized> Buf for &'a mut T {
     fn remaining(&self) -> usize {
         (**self).remaining()
     }
@@ -56,7 +56,35 @@ impl<'a, T: Buf> Buf for &'a mut T {
     }
 }
 
-impl<'a, T: BufMut> BufMut for &'a mut T {
+impl<'a, T: BufMut + ?Sized> BufMut for &'a mut T {
+    fn remaining_mut(&self) -> usize {
+        (**self).remaining_mut()
+    }
+
+    unsafe fn bytes_mut(&mut self) -> &mut [u8] {
+        (**self).bytes_mut()
+    }
+
+    unsafe fn advance_mut(&mut self, cnt: usize) {
+        (**self).advance_mut(cnt)
+    }
+}
+
+impl<T: Buf + ?Sized> Buf for Box<T> {
+    fn remaining(&self) -> usize {
+        (**self).remaining()
+    }
+
+    fn bytes(&self) -> &[u8] {
+        (**self).bytes()
+    }
+
+    fn advance(&mut self, cnt: usize) {
+        (**self).advance(cnt)
+    }
+}
+
+impl<T: BufMut + ?Sized> BufMut for Box<T> {
     fn remaining_mut(&self) -> usize {
         (**self).remaining_mut()
     }
-- 
GitLab