pub struct Buf<B> { /* private fields */ }
Expand description
A byte slice wrapper providing buffer functionality.
A Buf
wraps a byte slice (a type which implements AsRef<[u8]>
or
AsMut<[u8]>
) and implements various buffer traits by keeping track of
prefix, body, and suffix offsets within the byte slice.
Implementations§
Source§impl Buf<Vec<u8>>
impl Buf<Vec<u8>>
Sourcepub fn into_inner(self) -> Vec<u8>
pub fn into_inner(self) -> Vec<u8>
Extracts the contained data trimmed to the buffer’s range.
Source§impl<B: AsRef<[u8]>> Buf<B>
impl<B: AsRef<[u8]>> Buf<B>
Sourcepub fn new<R: RangeBounds<usize>>(buf: B, body: R) -> Buf<B>
pub fn new<R: RangeBounds<usize>>(buf: B, body: R) -> Buf<B>
Constructs a new Buf
.
new
constructs a new Buf
from a buffer and a body range. The bytes
within the range will be the body, the bytes before the range will be
the prefix, and the bytes after the range will be the suffix.
§Panics
Panics if range
is out of bounds of buf
, or if it is nonsensical
(the end precedes the start).
Sourcepub fn buffer_view(&mut self) -> BufView<'_>
pub fn buffer_view(&mut self) -> BufView<'_>
Constructs a BufView
which will be a BufferView
into this Buf
.
Source§impl<B: AsRef<[u8]> + AsMut<[u8]>> Buf<B>
impl<B: AsRef<[u8]> + AsMut<[u8]>> Buf<B>
Sourcepub fn buffer_view_mut(&mut self) -> BufViewMut<'_>
pub fn buffer_view_mut(&mut self) -> BufViewMut<'_>
Constructs a BufViewMut
which will be a BufferViewMut
into this Buf
.
Trait Implementations§
Source§impl<B: AsRef<[u8]>> Buffer for Buf<B>
impl<B: AsRef<[u8]>> Buffer for Buf<B>
Source§fn parse_with_view<'a, ParseArgs, P: ParsablePacket<&'a [u8], ParseArgs>>(
&'a mut self,
args: ParseArgs,
) -> Result<(P, &'a [u8]), P::Error>
fn parse_with_view<'a, ParseArgs, P: ParsablePacket<&'a [u8], ParseArgs>>( &'a mut self, args: ParseArgs, ) -> Result<(P, &'a [u8]), P::Error>
Like
ParseBuffer::parse_with
but additionally provides an
un-structured view into the parsed data on successful parsing.Source§impl<B: AsRef<[u8]>> FragmentedBuffer for Buf<B>
impl<B: AsRef<[u8]>> FragmentedBuffer for Buf<B>
Source§fn with_bytes<R, F>(&self, f: F) -> Rwhere
F: for<'macro_a, 'macro_b> FnOnce(FragmentedBytes<'macro_a, 'macro_b>) -> R,
fn with_bytes<R, F>(&self, f: F) -> Rwhere
F: for<'macro_a, 'macro_b> FnOnce(FragmentedBytes<'macro_a, 'macro_b>) -> R,
Invokes a callback on a view into this buffer’s contents as
FragmentedBytes
.Source§impl<B: AsRef<[u8]> + AsMut<[u8]>> FragmentedBufferMut for Buf<B>
impl<B: AsRef<[u8]> + AsMut<[u8]>> FragmentedBufferMut for Buf<B>
Source§fn with_bytes_mut<R, F>(&mut self, f: F) -> Rwhere
F: for<'macro_a, 'macro_b> FnOnce(FragmentedBytesMut<'macro_a, 'macro_b>) -> R,
fn with_bytes_mut<R, F>(&mut self, f: F) -> Rwhere
F: for<'macro_a, 'macro_b> FnOnce(FragmentedBytesMut<'macro_a, 'macro_b>) -> R,
Invokes a callback on a mutable view into this buffer’s contents as
FragmentedBytesMut
.Source§fn zero_range<R>(&mut self, range: R)where
R: RangeBounds<usize>,
fn zero_range<R>(&mut self, range: R)where
R: RangeBounds<usize>,
Sets all bytes in
range
to zero. Read moreSource§fn copy_within<R: RangeBounds<usize>>(&mut self, src: R, dest: usize)
fn copy_within<R: RangeBounds<usize>>(&mut self, src: R, dest: usize)
Copies elements from one part of the
FragmentedBufferMut
to another
part of itself. Read moreSource§impl<B: AsRef<[u8]>> GrowBuffer for Buf<B>
impl<B: AsRef<[u8]>> GrowBuffer for Buf<B>
Source§fn with_parts<O, F>(&self, f: F) -> O
fn with_parts<O, F>(&self, f: F) -> O
Gets a view into the parts of this
GrowBuffer
. Read moreSource§fn prefix_len(&self) -> usize
fn prefix_len(&self) -> usize
The length of the prefix.
Source§fn suffix_len(&self) -> usize
fn suffix_len(&self) -> usize
The length of the suffix.
Source§fn grow_front(&mut self, n: usize)
fn grow_front(&mut self, n: usize)
Grows the front of the body towards Growf the buffer. Read more
Source§fn grow_back(&mut self, n: usize)
fn grow_back(&mut self, n: usize)
Grows the back of the body towards the end of the buffer. Read more
Source§fn undo_parse(&mut self, meta: ParseMetadata)
fn undo_parse(&mut self, meta: ParseMetadata)
Undoes the effects of a previous parse in preparation for serialization. Read more
Source§impl<B: AsRef<[u8]> + AsMut<[u8]>> GrowBufferMut for Buf<B>
impl<B: AsRef<[u8]> + AsMut<[u8]>> GrowBufferMut for Buf<B>
Source§fn with_parts_mut<O, F>(&mut self, f: F) -> O
fn with_parts_mut<O, F>(&mut self, f: F) -> O
Gets a mutable view into the parts of this
GrowBufferMut
. Read moreSource§fn grow_front_zero(&mut self, n: usize)
fn grow_front_zero(&mut self, n: usize)
Extends the front of the body towards the beginning of the buffer,
zeroing the new bytes. Read more
Source§fn grow_back_zero(&mut self, n: usize)
fn grow_back_zero(&mut self, n: usize)
Extends the back of the body towards the end of the buffer, zeroing the
new bytes. Read more
Source§fn reset_zero(&mut self)
fn reset_zero(&mut self)
Resets the body to be equal to the entire buffer, zeroing the new bytes. Read more
Source§impl<B: AsRef<[u8]>> ParseBuffer for Buf<B>
impl<B: AsRef<[u8]>> ParseBuffer for Buf<B>
Source§fn parse_with<'a, ParseArgs, P: ParsablePacket<&'a [u8], ParseArgs>>(
&'a mut self,
args: ParseArgs,
) -> Result<P, P::Error>
fn parse_with<'a, ParseArgs, P: ParsablePacket<&'a [u8], ParseArgs>>( &'a mut self, args: ParseArgs, ) -> Result<P, P::Error>
Parses a packet with arguments. Read more
Source§impl<B: AsRef<[u8]> + AsMut<[u8]>> ParseBufferMut for Buf<B>
impl<B: AsRef<[u8]> + AsMut<[u8]>> ParseBufferMut for Buf<B>
Source§fn parse_with_mut<'a, ParseArgs, P: ParsablePacket<&'a mut [u8], ParseArgs>>(
&'a mut self,
args: ParseArgs,
) -> Result<P, P::Error>
fn parse_with_mut<'a, ParseArgs, P: ParsablePacket<&'a mut [u8], ParseArgs>>( &'a mut self, args: ParseArgs, ) -> Result<P, P::Error>
Parses a mutable packet with arguments. Read more
Source§impl<B: AsRef<[u8]>> ShrinkBuffer for Buf<B>
impl<B: AsRef<[u8]>> ShrinkBuffer for Buf<B>
Source§fn shrink_front(&mut self, n: usize)
fn shrink_front(&mut self, n: usize)
Shrinks the front of the body towards the end of the buffer. Read more
Source§fn shrink_back(&mut self, n: usize)
fn shrink_back(&mut self, n: usize)
Shrinks the back of the body towards the beginning of the buffer. Read more
Source§fn shrink_front_to(&mut self, len: usize)
fn shrink_front_to(&mut self, len: usize)
Shrinks the buffer to be no larger than
len
bytes, consuming from the
front. Read moreSource§fn shrink_back_to(&mut self, len: usize)
fn shrink_back_to(&mut self, len: usize)
Shrinks the buffer to be no larger than
len
bytes, consuming from the
back. Read moreimpl<B: AsRef<[u8]>> ContiguousBuffer for Buf<B>
impl<B: AsRef<[u8]>> Eq for Buf<B>
Auto Trait Implementations§
impl<B> Freeze for Buf<B>where
B: Freeze,
impl<B> RefUnwindSafe for Buf<B>where
B: RefUnwindSafe,
impl<B> Send for Buf<B>where
B: Send,
impl<B> Sync for Buf<B>where
B: Sync,
impl<B> Unpin for Buf<B>where
B: Unpin,
impl<B> UnwindSafe for Buf<B>where
B: UnwindSafe,
Blanket Implementations§
Source§impl<O, B> AsFragmentedByteSlice<B> for O
impl<O, B> AsFragmentedByteSlice<B> for O
Source§fn as_fragmented_byte_slice(&mut self) -> FragmentedByteSlice<'_, B>
fn as_fragmented_byte_slice(&mut self) -> FragmentedByteSlice<'_, B>
Generates a
FragmentedByteSlice
view of self
.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)Source§impl<B> Serializer for Bwhere
B: GrowBuffer + ShrinkBuffer,
impl<B> Serializer for Bwhere
B: GrowBuffer + ShrinkBuffer,
Source§fn serialize<BB, P>(
self,
outer: PacketConstraints,
provider: P,
) -> Result<BB, (SerializeError<<P as BufferProvider<<B as Serializer>::Buffer, BB>>::Error>, B)>
fn serialize<BB, P>( self, outer: PacketConstraints, provider: P, ) -> Result<BB, (SerializeError<<P as BufferProvider<<B as Serializer>::Buffer, BB>>::Error>, B)>
Serializes this
Serializer
, producing a buffer. Read moreSource§fn serialize_new_buf<BB, A>(
&self,
outer: PacketConstraints,
alloc: A,
) -> Result<BB, SerializeError<<A as BufferAlloc<BB>>::Error>>where
BB: ReusableBuffer,
A: BufferAlloc<BB>,
fn serialize_new_buf<BB, A>(
&self,
outer: PacketConstraints,
alloc: A,
) -> Result<BB, SerializeError<<A as BufferAlloc<BB>>::Error>>where
BB: ReusableBuffer,
A: BufferAlloc<BB>,
Serializes the data into a new buffer without consuming
self
. Read moreSource§fn serialize_vec(
self,
outer: PacketConstraints,
) -> Result<Either<Self::Buffer, Buf<Vec<u8>>>, (SerializeError<Never>, Self)>where
Self::Buffer: ReusableBuffer,
fn serialize_vec(
self,
outer: PacketConstraints,
) -> Result<Either<Self::Buffer, Buf<Vec<u8>>>, (SerializeError<Never>, Self)>where
Self::Buffer: ReusableBuffer,
Serializes this
Serializer
, allocating a Buf<Vec<u8>>
if the
contained buffer isn’t large enough. Read moreSource§fn serialize_no_alloc(
self,
outer: PacketConstraints,
) -> Result<Self::Buffer, (SerializeError<BufferTooShortError>, Self)>where
Self::Buffer: ReusableBuffer,
fn serialize_no_alloc(
self,
outer: PacketConstraints,
) -> Result<Self::Buffer, (SerializeError<BufferTooShortError>, Self)>where
Self::Buffer: ReusableBuffer,
Serializes this
Serializer
, failing if the existing buffer is not
large enough. Read moreSource§fn serialize_outer<B: GrowBufferMut, P: BufferProvider<Self::Buffer, B>>(
self,
provider: P,
) -> Result<B, (SerializeError<P::Error>, Self)>
fn serialize_outer<B: GrowBufferMut, P: BufferProvider<Self::Buffer, B>>( self, provider: P, ) -> Result<B, (SerializeError<P::Error>, Self)>
Serializes this
Serializer
as the outermost packet. Read moreSource§fn serialize_vec_outer(
self,
) -> Result<Either<Self::Buffer, Buf<Vec<u8>>>, (SerializeError<Never>, Self)>where
Self::Buffer: ReusableBuffer,
fn serialize_vec_outer(
self,
) -> Result<Either<Self::Buffer, Buf<Vec<u8>>>, (SerializeError<Never>, Self)>where
Self::Buffer: ReusableBuffer,
Serializes this
Serializer
as the outermost packet, allocating a
Buf<Vec<u8>>
if the contained buffer isn’t large enough. Read moreSource§fn serialize_no_alloc_outer(
self,
) -> Result<Self::Buffer, (SerializeError<BufferTooShortError>, Self)>where
Self::Buffer: ReusableBuffer,
fn serialize_no_alloc_outer(
self,
) -> Result<Self::Buffer, (SerializeError<BufferTooShortError>, Self)>where
Self::Buffer: ReusableBuffer,
Serializes this
Serializer
as the outermost packet, failing if the
existing buffer is not large enough. Read moreSource§fn encapsulate<B>(self, outer: B) -> Nested<Self, B>
fn encapsulate<B>(self, outer: B) -> Nested<Self, B>
Source§fn with_size_limit(self, limit: usize) -> Nested<Self, LimitedSizePacketBuilder>
fn with_size_limit(self, limit: usize) -> Nested<Self, LimitedSizePacketBuilder>
Creates a new
Serializer
which will enforce a size limit. Read more