Struct postcard::CobsAccumulator [−][src]
pub struct CobsAccumulator<const N: usize> { /* fields omitted */ }
Expand description
An accumulator used to collect chunked COBS data and deserialize it.
This is often useful when you receive “parts” of the message at a time, for example when draining a serial port buffer that may not contain an entire uninterrupted message.
Examples
Deserialize a struct by reading chunks from a Read
er.
use postcard::{CobsAccumulator, FeedResult}; use serde::Deserialize; use std::io::Read; let input = /* Anything that implements the `Read` trait */ let mut raw_buf = [0u8; 32]; let mut cobs_buf: CobsAccumulator<256> = CobsAccumulator::new(); while let Ok(ct) = input.read(&mut raw_buf) { // Finished reading input if ct == 0 { break; } let buf = &raw_buf[..ct]; let mut window = &buf[..]; 'cobs: while !window.is_empty() { window = match cobs_buf.feed::<MyData>(&window) { FeedResult::Consumed => break 'cobs, FeedResult::OverFull(new_wind) => new_wind, FeedResult::DeserError(new_wind) => new_wind, FeedResult::Success { data, remaining } => { // Do something with `data: MyData` here. dbg!(data); remaining } }; } }
Implementations
pub fn feed<'a, T>(&mut self, input: &'a [u8]) -> FeedResult<'a, T> where
T: for<'de> Deserialize<'de>,
pub fn feed<'a, T>(&mut self, input: &'a [u8]) -> FeedResult<'a, T> where
T: for<'de> Deserialize<'de>,
Appends data to the internal buffer and attempts to deserialize the accumulated data into
T
.