1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
use alloc::{borrow::ToOwned, vec::Vec}; use core::{ convert::From, ops::{Bound, Deref, RangeBounds}, }; #[derive(Debug, Default, Clone)] pub struct Bytes(Vec<u8>); impl From<Vec<u8>> for Bytes { fn from(value: Vec<u8>) -> Self { Self(value) } } impl From<&[u8]> for Bytes { fn from(value: &[u8]) -> Self { Self(value.to_owned()) } } impl From<Bytes> for Vec<u8> { fn from(value: Bytes) -> Self { value.0 } } impl Deref for Bytes { type Target = [u8]; fn deref(&self) -> &Self::Target { &self.0 } } impl Bytes { pub fn slice(&self, range: impl RangeBounds<usize>) -> Self { let len = self.len(); let begin = match range.start_bound() { Bound::Included(&n) => n, Bound::Excluded(&n) => n + 1, Bound::Unbounded => 0, }; let end = match range.end_bound() { Bound::Included(&n) => n + 1, Bound::Excluded(&n) => n, Bound::Unbounded => len, }; Self::from(&self.0[begin..end]) } }