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> Buf<B>
impl<B> Buf<B>
Sourcepub fn into_parts(self) -> (B, Range<usize>)
pub fn into_parts(self) -> (B, Range<usize>)
Extracts the underlying buffer and the 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>
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<'macro_a, R, F>(&'macro_a self, f: F) -> Rwhere
F: for<'macro_b> FnOnce(FragmentedBytes<'macro_b, 'macro_a>) -> R,
fn with_bytes<'macro_a, R, F>(&'macro_a self, f: F) -> Rwhere
F: for<'macro_b> FnOnce(FragmentedBytes<'macro_b, 'macro_a>) -> R,
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<'macro_a, R, F>(&'macro_a mut self, f: F) -> Rwhere
F: for<'macro_b> FnOnce(FragmentedBytesMut<'macro_b, 'macro_a>) -> R,
fn with_bytes_mut<'macro_a, R, F>(&'macro_a mut self, f: F) -> Rwhere
F: for<'macro_b> FnOnce(FragmentedBytesMut<'macro_b, 'macro_a>) -> R,
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>,
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)
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<'a, O, F>(&'a self, f: F) -> O
fn with_parts<'a, O, F>(&'a self, f: F) -> O
GrowBuffer. Read moreSource§fn prefix_len(&self) -> usize
fn prefix_len(&self) -> usize
Source§fn suffix_len(&self) -> usize
fn suffix_len(&self) -> usize
Source§fn grow_front(&mut self, n: usize)
fn grow_front(&mut self, n: usize)
Source§fn grow_back(&mut self, n: usize)
fn grow_back(&mut self, n: usize)
Source§fn undo_parse(&mut self, meta: ParseMetadata)
fn undo_parse(&mut self, meta: ParseMetadata)
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<'a, O, F>(&'a mut self, f: F) -> O
fn with_parts_mut<'a, O, F>(&'a mut self, f: F) -> O
GrowBufferMut. Read moreSource§fn with_all_contents_mut<'a, O, F>(&'a mut self, f: F) -> Owhere
F: for<'b> FnOnce(FragmentedBytesMut<'b, 'a>) -> O,
fn with_all_contents_mut<'a, O, F>(&'a mut self, f: F) -> Owhere
F: for<'b> FnOnce(FragmentedBytesMut<'b, 'a>) -> O,
GrowBufferMut. Read moreSource§fn grow_front_zero(&mut self, n: usize)
fn grow_front_zero(&mut self, n: usize)
Source§fn grow_back_zero(&mut self, n: usize)
fn grow_back_zero(&mut self, n: usize)
Source§fn reset_zero(&mut self)
fn reset_zero(&mut self)
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>
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>
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)
Source§fn shrink_back(&mut self, n: usize)
fn shrink_back(&mut self, n: usize)
Source§fn shrink_front_to(&mut self, len: usize)
fn shrink_front_to(&mut self, len: usize)
len bytes, consuming from the
front. Read moreSource§fn shrink_back_to(&mut self, len: usize)
fn shrink_back_to(&mut self, len: usize)
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> UnsafeUnpin for Buf<B>where
B: UnsafeUnpin,
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>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<B> NestableSerializer for Bwhere
B: GrowBuffer + ShrinkBuffer,
impl<B> NestableSerializer for Bwhere
B: GrowBuffer + ShrinkBuffer,
Source§fn wrap_in<B: NestablePacketBuilder>(self, outer: B) -> Nested<Self, B>
fn wrap_in<B: NestablePacketBuilder>(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>
Serializer which will enforce a size limit. Read moreSource§impl<C, B> PartialSerializer<C> for B
impl<C, B> PartialSerializer<C> for B
Source§fn partial_serialize(
&self,
_context: &mut C,
_constraints: PacketConstraints,
_buffer: &mut [u8],
) -> Result<PartialSerializeResult, SerializeError<Infallible>>
fn partial_serialize( &self, _context: &mut C, _constraints: PacketConstraints, _buffer: &mut [u8], ) -> Result<PartialSerializeResult, SerializeError<Infallible>>
buffer. Read moreSource§impl<C, B> Serializer<C> for B
impl<C, B> Serializer<C> for B
Source§fn serialize<BB, P>(
self,
context: &mut C,
constraints: PacketConstraints,
provider: P,
) -> Result<BB, (SerializeError<<P as BufferProvider<<B as Serializer<C>>::Buffer, BB>>::Error>, B)>
fn serialize<BB, P>( self, context: &mut C, constraints: PacketConstraints, provider: P, ) -> Result<BB, (SerializeError<<P as BufferProvider<<B as Serializer<C>>::Buffer, BB>>::Error>, B)>
Serializer, producing a buffer. Read moreSource§fn serialize_new_buf<BB, A>(
&self,
_context: &mut C,
constraints: PacketConstraints,
alloc: A,
) -> Result<BB, SerializeError<<A as LayoutBufferAlloc<BB>>::Error>>where
BB: GrowBufferMut,
A: LayoutBufferAlloc<BB>,
fn serialize_new_buf<BB, A>(
&self,
_context: &mut C,
constraints: PacketConstraints,
alloc: A,
) -> Result<BB, SerializeError<<A as LayoutBufferAlloc<BB>>::Error>>where
BB: GrowBufferMut,
A: LayoutBufferAlloc<BB>,
self. Read moreSource§fn serialize_vec(
self,
context: &mut C,
constraints: PacketConstraints,
) -> Result<Either<Self::Buffer, Buf<Vec<u8>>>, (SerializeError<Never>, Self)>where
Self::Buffer: ReusableBuffer,
fn serialize_vec(
self,
context: &mut C,
constraints: PacketConstraints,
) -> Result<Either<Self::Buffer, Buf<Vec<u8>>>, (SerializeError<Never>, Self)>where
Self::Buffer: ReusableBuffer,
Serializer, allocating a Buf<Vec<u8>> if the
contained buffer isn’t large enough. Read moreSource§fn serialize_no_alloc(
self,
context: &mut C,
constraints: PacketConstraints,
) -> Result<Self::Buffer, (SerializeError<BufferTooShortError>, Self)>where
Self::Buffer: ReusableBuffer,
fn serialize_no_alloc(
self,
context: &mut C,
constraints: PacketConstraints,
) -> Result<Self::Buffer, (SerializeError<BufferTooShortError>, Self)>where
Self::Buffer: ReusableBuffer,
Serializer, failing if the existing buffer is not
large enough. Read moreSource§fn serialize_outer<B: GrowBufferMut, P: BufferProvider<Self::Buffer, B>>(
self,
context: &mut C,
provider: P,
) -> Result<B, (SerializeError<P::Error>, Self)>
fn serialize_outer<B: GrowBufferMut, P: BufferProvider<Self::Buffer, B>>( self, context: &mut C, provider: P, ) -> Result<B, (SerializeError<P::Error>, Self)>
Serializer as the outermost packet. Read moreSource§fn serialize_vec_outer(
self,
context: &mut C,
) -> Result<Either<Self::Buffer, Buf<Vec<u8>>>, (SerializeError<Never>, Self)>where
Self::Buffer: ReusableBuffer,
fn serialize_vec_outer(
self,
context: &mut C,
) -> Result<Either<Self::Buffer, Buf<Vec<u8>>>, (SerializeError<Never>, Self)>where
Self::Buffer: ReusableBuffer,
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,
context: &mut C,
) -> Result<Self::Buffer, (SerializeError<BufferTooShortError>, Self)>where
Self::Buffer: ReusableBuffer,
fn serialize_no_alloc_outer(
self,
context: &mut C,
) -> Result<Self::Buffer, (SerializeError<BufferTooShortError>, Self)>where
Self::Buffer: ReusableBuffer,
Serializer as the outermost packet, failing if the
existing buffer is not large enough. Read moreSource§fn serialize_vec_outer_no_reuse(
&self,
context: &mut C,
) -> Result<Buf<Vec<u8>>, SerializeError<Never>>
fn serialize_vec_outer_no_reuse( &self, context: &mut C, ) -> Result<Buf<Vec<u8>>, SerializeError<Never>>
Serializer::serialize_vec_outer, but never attempts to reuse
the underlying buffer.