Struct CobsDecoder

Source
pub struct CobsDecoder<'a> { /* private fields */ }
Expand description

The CobsDecoder type is used to decode a stream of bytes to a given mutable output slice. This is often useful when heap data structures are not available, or when not all message bytes are received at a single point in time.

Implementations§

Source§

impl<'a> CobsDecoder<'a>

Source

pub fn new(dest: &'a mut [u8]) -> CobsDecoder<'a>

Create a new streaming Cobs Decoder. Provide the output buffer for the decoded message to be placed in

Source

pub fn feed(&mut self, data: u8) -> Result<Option<usize>, DecodeError>

Push a single byte into the streaming CobsDecoder. Return values mean:

  • Ok(None) - State machine okay, more data needed
  • Ok(Some(N)) - A message of N bytes was successfully decoded
  • Err(DecodeError) - Message decoding failed

NOTE: Sentinel value must be included in the input to this function for the decoding to complete

Source

pub fn push(&mut self, data: &[u8]) -> Result<Option<DecodeReport>, DecodeError>

Push a slice of bytes into the streaming CobsDecoder. Return values mean:

  • Ok(None) - State machine okay, more data needed
  • Ok(Some(DecodeReport))) - A message was successfully decoded. The parse size of the report specifies the consumed bytes of the passed data chunk.
  • Err(DecodeError) - Message decoding failed

If the decoder is used for continuous decoding, the user must take care of feeding any undecoded bytes of the input data back into the decoder. This can be done by Self::pushing the undecoded bytes (the last X bytes of the input with X being the length of the input minus the parsed length) into the decoder after a frame was decoded.

NOTE: Sentinel value must be included in the input to this function for the decoding to complete

Source

pub fn dest(&self) -> &[u8]

Destination buffer which contains decoded frames.

Source

pub fn dest_mut(&mut self) -> &mut [u8]

Destination buffer which contains decoded frames.

This allows using the buffer for other purposes than decoding after a frame was found. Changing the buffer in any other state might corrupt a frame which might currently be decoded.

Trait Implementations§

Source§

impl<'a> Debug for CobsDecoder<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for CobsDecoder<'a>

§

impl<'a> RefUnwindSafe for CobsDecoder<'a>

§

impl<'a> Send for CobsDecoder<'a>

§

impl<'a> Sync for CobsDecoder<'a>

§

impl<'a> Unpin for CobsDecoder<'a>

§

impl<'a> !UnwindSafe for CobsDecoder<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.