//! Postcard encode and decode implementations. use std::io::{self, BufRead, Write}; use serde::{Serialize, de::DeserializeOwned}; pub(crate) fn read<'a, R: BufRead + ?Sized>( inp: &mut R, buf: &'a mut Vec, ) -> io::Result>> { buf.clear(); let n = inp.read_until(0, buf)?; if n == 0 { return Ok(None); } Ok(Some(buf)) } pub(crate) fn write(out: &mut W, buf: &[u8]) -> io::Result<()> { out.write_all(buf)?; out.flush() } pub(crate) fn encode(msg: &T) -> io::Result> { postcard::to_allocvec_cobs(msg).map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e)) } pub(crate) fn decode(buf: &mut [u8]) -> io::Result { postcard::from_bytes_cobs(buf).map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e)) }