From 63bebaa8c08eea3e54a0147d5d6d8b95573d6bb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20=C3=81vila=20de=20Esp=C3=ADndola?= Date: Thu, 12 Jul 2018 19:03:47 -0700 Subject: [PATCH] Implement IntoBuf for mut slices. (#214) With this if foo is a mutable slice, it is possible to do foo.into_buf().put_u32_le(42); Before this patch into_buf would create a Cursor<&'a [u8]> and it would not be possible to write into it. --- src/buf/into_buf.rs | 8 ++++++++ tests/test_bytes.rs | 9 ++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/buf/into_buf.rs b/src/buf/into_buf.rs index 1071908..4c3b420 100644 --- a/src/buf/into_buf.rs +++ b/src/buf/into_buf.rs @@ -63,6 +63,14 @@ impl<'a> IntoBuf for &'a [u8] { } } +impl<'a> IntoBuf for &'a mut [u8] { + type Buf = io::Cursor<&'a mut [u8]>; + + fn into_buf(self) -> Self::Buf { + io::Cursor::new(self) + } +} + impl<'a> IntoBuf for &'a str { type Buf = io::Cursor<&'a [u8]>; diff --git a/tests/test_bytes.rs b/tests/test_bytes.rs index 03da9dd..c0cba6b 100644 --- a/tests/test_bytes.rs +++ b/tests/test_bytes.rs @@ -1,6 +1,6 @@ extern crate bytes; -use bytes::{Bytes, BytesMut, BufMut}; +use bytes::{Bytes, BytesMut, BufMut, IntoBuf}; const LONG: &'static [u8] = b"mary had a little lamb, little lamb, little lamb"; const SHORT: &'static [u8] = b"hello world"; @@ -303,6 +303,13 @@ fn fns_defined_for_bytes_mut() { assert_eq!(&v[..], bytes); } +#[test] +fn mut_into_buf() { + let mut v = vec![0, 0, 0, 0]; + let s = &mut v[..]; + s.into_buf().put_u32_le(42); +} + #[test] fn reserve_convert() { // Inline -> Vec