From 6440da3843a190923d4ba02a7d849ad5d7443766 Mon Sep 17 00:00:00 2001 From: Sean McArthur Date: Wed, 16 Oct 2019 10:23:33 -0700 Subject: [PATCH] Remove Buf impl for &str A `&str` cannot arbitrarily advance bytes, since it will panic if advanced to the middle of a Unicode segment. --- src/buf/buf_impl.rs | 21 ++------------------- src/buf/buf_mut.rs | 8 ++++---- src/bytes_mut.rs | 4 ++-- tests/test_bytes.rs | 2 +- 4 files changed, 9 insertions(+), 26 deletions(-) diff --git a/src/buf/buf_impl.rs b/src/buf/buf_impl.rs index b9e9141f7..48f8d12a4 100644 --- a/src/buf/buf_impl.rs +++ b/src/buf/buf_impl.rs @@ -903,9 +903,9 @@ pub trait Buf { /// # Examples /// /// ``` - /// use bytes::{Buf}; + /// use bytes::Buf; /// - /// let bytes = "hello world".to_bytes(); + /// let bytes = (&b"hello world"[..]).to_bytes(); /// assert_eq!(&bytes[..], &b"hello world"[..]); /// ``` fn to_bytes(&mut self) -> crate::Bytes { @@ -971,23 +971,6 @@ impl Buf for &[u8] { } } -impl Buf for &str { - #[inline] - fn remaining(&self) -> usize { - self.len() - } - - #[inline] - fn bytes(&self) -> &[u8] { - self.as_bytes() - } - - #[inline] - fn advance(&mut self, cnt: usize) { - *self = &self[cnt..]; - } -} - impl Buf for Option<[u8; 1]> { fn remaining(&self) -> usize { if self.is_some() { diff --git a/src/buf/buf_mut.rs b/src/buf/buf_mut.rs index 1571580ed..ecf4720ba 100644 --- a/src/buf/buf_mut.rs +++ b/src/buf/buf_mut.rs @@ -24,7 +24,7 @@ use alloc::{vec::Vec, boxed::Box}; /// /// let mut buf = vec![]; /// -/// buf.put("hello world"); +/// buf.put(&b"hello world"[..]); /// /// assert_eq!(buf, b"hello world"); /// ``` @@ -44,7 +44,7 @@ pub trait BufMut { /// let mut buf = &mut dst[..]; /// /// let original_remaining = buf.remaining_mut(); - /// buf.put("hello"); + /// buf.put(&b"hello"[..]); /// /// assert_eq!(original_remaining - 5, buf.remaining_mut()); /// ``` @@ -114,7 +114,7 @@ pub trait BufMut { /// /// assert!(buf.has_remaining_mut()); /// - /// buf.put("hello"); + /// buf.put(&b"hello"[..]); /// /// assert!(!buf.has_remaining_mut()); /// ``` @@ -217,7 +217,7 @@ pub trait BufMut { /// /// buf.put_u8(b'h'); /// buf.put(&b"ello"[..]); - /// buf.put(" world"); + /// buf.put(&b" world"[..]); /// /// assert_eq!(buf, b"hello world"); /// ``` diff --git a/src/bytes_mut.rs b/src/bytes_mut.rs index c5642cff7..6777929c6 100644 --- a/src/bytes_mut.rs +++ b/src/bytes_mut.rs @@ -38,7 +38,7 @@ use crate::loom::sync::atomic::{self, AtomicPtr, AtomicUsize, Ordering}; /// /// buf.put_u8(b'h'); /// buf.put_u8(b'e'); -/// buf.put("llo"); +/// buf.put(&b"llo"[..]); /// /// assert_eq!(&buf[..], b"hello"); /// @@ -219,7 +219,7 @@ impl BytesMut { /// use std::thread; /// /// let mut b = BytesMut::with_capacity(64); - /// b.put("hello world"); + /// b.put(&b"hello world"[..]); /// let b1 = b.freeze(); /// let b2 = b1.clone(); /// diff --git a/tests/test_bytes.rs b/tests/test_bytes.rs index 6b3be5988..212189eea 100644 --- a/tests/test_bytes.rs +++ b/tests/test_bytes.rs @@ -402,7 +402,7 @@ fn reserve_vec_recycling() { let mut bytes = BytesMut::with_capacity(16); assert_eq!(bytes.capacity(), 16); let addr = bytes.as_ptr() as usize; - bytes.put("0123456789012345"); + bytes.put("0123456789012345".as_bytes()); assert_eq!(bytes.as_ptr() as usize, addr); bytes.advance(10); assert_eq!(bytes.capacity(), 6);