mirror of
https://github.com/tokio-rs/bytes.git
synced 2026-08-16 00:00:15 +02:00
impl From<Box<[u8]>> for Bytes (#504)
This commit is contained in:
+9
-3
@@ -797,14 +797,20 @@ impl From<&'static str> for Bytes {
|
|||||||
|
|
||||||
impl From<Vec<u8>> for Bytes {
|
impl From<Vec<u8>> for Bytes {
|
||||||
fn from(vec: Vec<u8>) -> Bytes {
|
fn from(vec: Vec<u8>) -> Bytes {
|
||||||
// into_boxed_slice doesn't return a heap allocation for empty vectors,
|
let slice = vec.into_boxed_slice();
|
||||||
|
slice.into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<Box<[u8]>> for Bytes {
|
||||||
|
fn from(slice: Box<[u8]>) -> Bytes {
|
||||||
|
// Box<[u8]> doesn't contain a heap allocation for empty slices,
|
||||||
// so the pointer isn't aligned enough for the KIND_VEC stashing to
|
// so the pointer isn't aligned enough for the KIND_VEC stashing to
|
||||||
// work.
|
// work.
|
||||||
if vec.is_empty() {
|
if slice.is_empty() {
|
||||||
return Bytes::new();
|
return Bytes::new();
|
||||||
}
|
}
|
||||||
|
|
||||||
let slice = vec.into_boxed_slice();
|
|
||||||
let len = slice.len();
|
let len = slice.len();
|
||||||
let ptr = Box::into_raw(slice) as *mut u8;
|
let ptr = Box::into_raw(slice) as *mut u8;
|
||||||
|
|
||||||
|
|||||||
@@ -994,3 +994,11 @@ fn bytes_put_bytes() {
|
|||||||
bytes.put_bytes(19, 2);
|
bytes.put_bytes(19, 2);
|
||||||
assert_eq!([17, 19, 19], bytes.as_ref());
|
assert_eq!([17, 19, 19], bytes.as_ref());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn box_slice_empty() {
|
||||||
|
// See https://github.com/tokio-rs/bytes/issues/340
|
||||||
|
let empty: Box<[u8]> = Default::default();
|
||||||
|
let b = Bytes::from(empty);
|
||||||
|
assert!(b.is_empty());
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user