Struct s2n_codec::decoder::buffer_mut::DecoderBufferMut
source · [−]pub struct DecoderBufferMut<'a> { /* private fields */ }
Expand description
DecoderBufferMut is a panic-free, mutable byte buffer for decoding untrusted input
Implementations
sourceimpl<'a> DecoderBufferMut<'a>
impl<'a> DecoderBufferMut<'a>
sourcepub fn freeze(self) -> DecoderBuffer<'a>
pub fn freeze(self) -> DecoderBuffer<'a>
Freeze the mutable buffer into a DecoderBuffer
sourceimpl<'a> DecoderBufferMut<'a>
impl<'a> DecoderBufferMut<'a>
sourcepub fn decode_slice(
self,
count: usize
) -> DecoderBufferMutResult<'a, DecoderBufferMut<'a>>
pub fn decode_slice(
self,
count: usize
) -> DecoderBufferMutResult<'a, DecoderBufferMut<'a>>
Decode a slice of bytes by count
, removing the slice from the current buffer
let mut data = [0, 1, 2, 3, 4];
let buffer = DecoderBufferMut::new(&mut data);
let (slice, buffer) = buffer.decode_slice(5).unwrap();
assert_eq!(slice, [0u8, 1, 2, 3, 4][..]);
assert!(buffer.is_empty());
sourcepub fn decode<T: DecoderValueMut<'a>>(self) -> DecoderBufferMutResult<'a, T>
pub fn decode<T: DecoderValueMut<'a>>(self) -> DecoderBufferMutResult<'a, T>
Decode a value of type T
, splitting the data from the current buffer
let mut data = [0, 1, 2, 3, 4, 5, 6];
let buffer = DecoderBufferMut::new(&mut data);
let (value, buffer) = buffer.decode::<u8>().unwrap();
assert_eq!(value, 0);
let (value, buffer) = buffer.decode::<u16>().unwrap();
assert_eq!(value, 258);
let (value, buffer) = buffer.decode::<u32>().unwrap();
assert_eq!(value, 50_595_078);
assert!(buffer.is_empty());
sourcepub fn decode_slice_with_len_prefix<Length: DecoderValueMut<'a> + TryInto<usize>>(
self
) -> DecoderBufferMutResult<'a, Self>
pub fn decode_slice_with_len_prefix<Length: DecoderValueMut<'a> + TryInto<usize>>(
self
) -> DecoderBufferMutResult<'a, Self>
Decode a slice prefixed by type Length
, splitting the data from the
current buffer.
With a Length
as encoded u8
:
let mut data = [5, 0, 1, 2, 3, 4];
let buffer = DecoderBufferMut::new(&mut data);
let (slice, buffer) = buffer.decode_slice_with_len_prefix::<u8>().unwrap();
assert_eq!(slice, [0u8, 1, 2, 3, 4][..]);
assert!(buffer.is_empty())
With a Length
as encoded u16
:
let mut data = [0, 5, 0, 1, 2, 3, 4];
let buffer = DecoderBufferMut::new(&mut data);
let (slice, buffer) = buffer.decode_slice_with_len_prefix::<u16>().unwrap();
assert_eq!(slice, [0u8, 1, 2, 3, 4][..]);
assert!(buffer.is_empty())
sourcepub fn decode_with_len_prefix<Length: DecoderValueMut<'a> + TryInto<usize>, T: DecoderValueMut<'a>>(
self
) -> DecoderBufferMutResult<'a, T>
pub fn decode_with_len_prefix<Length: DecoderValueMut<'a> + TryInto<usize>, T: DecoderValueMut<'a>>(
self
) -> DecoderBufferMutResult<'a, T>
Decode a value of type T
prefixed by type Length
, splitting the data from the
current buffer.
With a Length
as encoded u8
and T
as u16
:
let mut data = [2, 0, 1, 2, 3];
let buffer = DecoderBufferMut::new(&mut data);
let (value, buffer) = buffer.decode_with_len_prefix::<u8, u16>().unwrap();
assert_eq!(value, 1);
assert_eq!(buffer, [2, 3][..])
The DecoderValueMut
implementation of T
must consume the entire subslice
otherwise an error will be returned.
let mut data = [3, 0, 1, 2];
let buffer = DecoderBufferMut::new(&mut data);
let result = buffer.decode_with_len_prefix::<u8, u16>();
assert!(result.is_err())
sourcepub fn decode_parameterized<T: DecoderParameterizedValueMut<'a>>(
self,
parameter: T::Parameter
) -> DecoderBufferMutResult<'a, T>
pub fn decode_parameterized<T: DecoderParameterizedValueMut<'a>>(
self,
parameter: T::Parameter
) -> DecoderBufferMutResult<'a, T>
Decode a parameterized value of type T
implementing DecoderParameterizedValueMut
sourcepub fn skip(self, count: usize) -> Result<DecoderBufferMut<'a>, DecoderError>
pub fn skip(self, count: usize) -> Result<DecoderBufferMut<'a>, DecoderError>
Skip a count
of bytes, discarding the bytes
let mut data = [0, 1, 2, 3, 4];
let buffer = DecoderBufferMut::new(&mut data);
let buffer = buffer.skip(3).unwrap();
assert_eq!(buffer, [3, 4][..]);
sourcepub fn skip_with_len_prefix<Length: DecoderValueMut<'a> + TryInto<usize>>(
self
) -> Result<DecoderBufferMut<'a>, DecoderError>
pub fn skip_with_len_prefix<Length: DecoderValueMut<'a> + TryInto<usize>>(
self
) -> Result<DecoderBufferMut<'a>, DecoderError>
Skip a number of bytes encoded as a length prefix of type Length
With a Length
encoded as u8
:
let mut data = [5, 0, 1, 2, 3, 4];
let buffer = DecoderBufferMut::new(&mut data);
let buffer = buffer.skip_with_len_prefix::<u8>().unwrap();
assert!(buffer.is_empty());
sourcepub fn skip_into_range(
self,
count: usize,
original_buffer: &DecoderBufferMut<'_>
) -> DecoderBufferMutResult<'a, CheckedRange>
pub fn skip_into_range(
self,
count: usize,
original_buffer: &DecoderBufferMut<'_>
) -> DecoderBufferMutResult<'a, CheckedRange>
Skip a count
of bytes, returning a CheckedRange
for later access
sourcepub fn skip_into_range_with_len_prefix<Length: DecoderValueMut<'a> + TryInto<usize>>(
self,
original_buffer: &DecoderBufferMut<'_>
) -> DecoderBufferMutResult<'a, CheckedRange>
pub fn skip_into_range_with_len_prefix<Length: DecoderValueMut<'a> + TryInto<usize>>(
self,
original_buffer: &DecoderBufferMut<'_>
) -> DecoderBufferMutResult<'a, CheckedRange>
Skip a number of bytes encoded as a length prefix of type Length
into a CheckedRange
for later access
sourcepub fn get_checked_range(&self, range: &CheckedRange) -> DecoderBuffer<'_>
pub fn get_checked_range(&self, range: &CheckedRange) -> DecoderBuffer<'_>
Reads data from a CheckedRange
sourcepub fn peek(&'a self) -> DecoderBuffer<'a>
pub fn peek(&'a self) -> DecoderBuffer<'a>
Create a peeking DecoderBuffer
from the current buffer view
let mut data = [0, 1];
let buffer = DecoderBufferMut::new(&mut data);
let peek = buffer.peek();
let (value, peek) = peek.decode::<u16>().unwrap();
assert_eq!(value, 1);
assert!(peek.is_empty());
// `buffer` still contains the previous view
assert_eq!(buffer, [0, 1][..]);
sourcepub fn peek_byte(&self, index: usize) -> Result<u8, DecoderError>
pub fn peek_byte(&self, index: usize) -> Result<u8, DecoderError>
Returns a single byte at index
let mut data = [0, 1, 2];
let buffer = DecoderBufferMut::new(&mut data);
assert_eq!(buffer.peek_byte(0).unwrap(), 0);
assert_eq!(buffer.peek_byte(1).unwrap(), 1);
assert_eq!(buffer.peek_byte(2).unwrap(), 2);
// `buffer` has not changed
assert_eq!(buffer, [0, 1, 2][..]);
sourcepub fn peek_range(
&self,
range: Range<usize>
) -> Result<DecoderBuffer<'_>, DecoderError>
pub fn peek_range(
&self,
range: Range<usize>
) -> Result<DecoderBuffer<'_>, DecoderError>
Returns a PeekBuffer
by range
sourcepub fn ensure_empty(&self) -> Result<(), DecoderError>
pub fn ensure_empty(&self) -> Result<(), DecoderError>
Returns an error if the buffer is not empty.
let mut data = [1];
let buffer = DecoderBufferMut::new(&mut data);
assert!(buffer.ensure_empty().is_err());
let (_, buffer) = buffer.decode::<u8>().unwrap();
assert!(buffer.ensure_empty().is_ok());
sourcepub fn ensure_len(&self, len: usize) -> Result<(), DecoderError>
pub fn ensure_len(&self, len: usize) -> Result<(), DecoderError>
Returns an error if the buffer does not have at least len
bytes.
let mut data = [0, 1, 2];
let buffer = DecoderBufferMut::new(&mut data);
assert!(buffer.ensure_len(2).is_ok());
assert!(buffer.ensure_len(5).is_err());
sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of bytes in the buffer.
let mut data = [0, 1, 2];
let buffer = DecoderBufferMut::new(&mut data);
assert_eq!(buffer.len(), 3);
let (_, buffer) = buffer.decode::<u8>().unwrap();
assert_eq!(buffer.len(), 2);
Trait Implementations
sourceimpl<'a> Debug for DecoderBufferMut<'a>
impl<'a> Debug for DecoderBufferMut<'a>
sourceimpl<'a> DecoderValueMut<'a> for DecoderBufferMut<'a>
impl<'a> DecoderValueMut<'a> for DecoderBufferMut<'a>
fn decode_mut(buffer: DecoderBufferMut<'a>) -> DecoderBufferMutResult<'a, Self>
sourceimpl EncoderValue for DecoderBufferMut<'_>
impl EncoderValue for DecoderBufferMut<'_>
sourcefn encoding_size(&self) -> usize
fn encoding_size(&self) -> usize
Returns the encoding size with no buffer constrains
sourcefn encoding_size_for_encoder<E: Encoder>(&self, _encoder: &E) -> usize
fn encoding_size_for_encoder<E: Encoder>(&self, _encoder: &E) -> usize
Returns the encoding size for the given encoder’s capacity
sourcefn encode_mut<E: Encoder>(&mut self, encoder: &mut E)
fn encode_mut<E: Encoder>(&mut self, encoder: &mut E)
Encodes the value into the encoder, while potentially mutating the value itself
sourcefn encode_with_len_prefix<Len: TryFrom<usize> + EncoderValue, E: Encoder>(
&self,
encoder: &mut E
) where
Self: Sized,
Len::Error: Debug,
fn encode_with_len_prefix<Len: TryFrom<usize> + EncoderValue, E: Encoder>(
&self,
encoder: &mut E
) where
Self: Sized,
Len::Error: Debug,
Encodes the value into the encoder with a prefix of Len
sourceimpl<'a> From<DecoderBufferMut<'a>> for DecoderBuffer<'a>
impl<'a> From<DecoderBufferMut<'a>> for DecoderBuffer<'a>
sourcefn from(b: DecoderBufferMut<'a>) -> Self
fn from(b: DecoderBufferMut<'a>) -> Self
Performs the conversion.
sourceimpl<'a> Hash for DecoderBufferMut<'a>
impl<'a> Hash for DecoderBufferMut<'a>
sourceimpl<'a> Ord for DecoderBufferMut<'a>
impl<'a> Ord for DecoderBufferMut<'a>
sourceimpl<'a> PartialEq<DecoderBufferMut<'a>> for DecoderBufferMut<'a>
impl<'a> PartialEq<DecoderBufferMut<'a>> for DecoderBufferMut<'a>
sourcefn eq(&self, other: &DecoderBufferMut<'a>) -> bool
fn eq(&self, other: &DecoderBufferMut<'a>) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
sourcefn ne(&self, other: &DecoderBufferMut<'a>) -> bool
fn ne(&self, other: &DecoderBufferMut<'a>) -> bool
This method tests for !=
.
sourceimpl<'a> PartialOrd<DecoderBufferMut<'a>> for DecoderBufferMut<'a>
impl<'a> PartialOrd<DecoderBufferMut<'a>> for DecoderBufferMut<'a>
sourcefn partial_cmp(&self, other: &DecoderBufferMut<'a>) -> Option<Ordering>
fn partial_cmp(&self, other: &DecoderBufferMut<'a>) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
impl<'a> Eq for DecoderBufferMut<'a>
impl<'a> StructuralEq for DecoderBufferMut<'a>
impl<'a> StructuralPartialEq for DecoderBufferMut<'a>
Auto Trait Implementations
impl<'a> RefUnwindSafe for DecoderBufferMut<'a>
impl<'a> Send for DecoderBufferMut<'a>
impl<'a> Sync for DecoderBufferMut<'a>
impl<'a> Unpin for DecoderBufferMut<'a>
impl<'a> !UnwindSafe for DecoderBufferMut<'a>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more