cbor_smol/
lib.rs

1#![cfg_attr(not(test), no_std)]
2
3#[macro_use]
4extern crate delog;
5generate_macros!();
6
7use serde_core as serde;
8
9pub(crate) mod consts;
10pub mod de;
11pub mod error;
12pub mod ser;
13
14pub use error::{Error, Result};
15use ser::Writer;
16
17/// Serialize an object to a `Writer`
18///
19/// Returns the amount of bytes written to the writer
20pub fn cbor_serialize_to<T: ?Sized + serde::Serialize, W: Writer>(
21    object: &T,
22    writer: W,
23) -> Result<usize> {
24    let mut serializer = ser::Serializer::new(writer);
25    object.serialize(&mut serializer)?;
26    Ok(serializer.written())
27}
28
29// kudos to postcard, this is much nicer than returning size
30pub fn cbor_serialize<'a, T: ?Sized + serde::Serialize>(
31    object: &T,
32    buffer: &'a mut [u8],
33) -> Result<&'a [u8]> {
34    let mut buf = &mut *buffer;
35    let written = cbor_serialize_to(object, &mut buf)?;
36    Ok(&buffer[..written])
37}
38
39pub fn cbor_deserialize<'de, T: serde::Deserialize<'de>>(buffer: &'de [u8]) -> Result<T> {
40    // cortex_m_semihosting::hprintln!("deserializing {:?}", buffer).ok();
41    de::from_bytes(buffer)
42}