electricui_embedded/wire/
framing.rs

1//! A framing wrapper around <https://crates.io/crates/corncobs>
2
3use err_derive::Error;
4
5#[derive(Debug, Copy, Clone, Error)]
6pub enum Error {
7    #[error(display = "{}", _0)]
8    Cobs(#[source] corncobs::CobsError),
9}
10
11pub struct Framing {}
12
13impl Framing {
14    pub const ZERO: u8 = corncobs::ZERO;
15
16    pub const fn max_encoded_len(raw_len: usize) -> usize {
17        corncobs::max_encoded_len(raw_len)
18    }
19
20    pub fn decode_buf(bytes: &[u8], output: &mut [u8]) -> Result<usize, Error> {
21        let b = corncobs::decode_buf(bytes, output)?;
22        Ok(b)
23    }
24
25    pub fn decode_in_place(bytes: &mut [u8]) -> Result<usize, Error> {
26        let b = corncobs::decode_in_place(bytes)?;
27        Ok(b)
28    }
29
30    pub fn encode_buf(bytes: &[u8], output: &mut [u8]) -> usize {
31        corncobs::encode_buf(bytes, output)
32    }
33
34    pub fn encode_iter(bytes: &[u8]) -> impl Iterator<Item = u8> + '_ {
35        corncobs::encode_iter(bytes)
36    }
37}