minicbor_serde/lib.rs
1//! Support for (de-)serialising CBOR with [serde].
2//!
3//! In contrast to [minicbor-derive], this serde-based implementation makes no
4//! attempt to be particularly clever with regards to forward and backward
5//! compatibility, nor does it use integers instead of strings for struct field
6//! names or enum constructors. If those features are important, consider using
7//! [minicbor-derive] instead.
8//!
9//! # Example
10//!
11//! ```
12//! use serde::{Deserialize, Serialize};
13//!
14//! #[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
15//! struct S {
16//! field: bool
17//! }
18//!
19//! let s1 = S::default();
20//!
21//! let cbor = minicbor_serde::to_vec(&s1)?;
22//! let s2: S = minicbor_serde::from_slice(&cbor)?;
23//!
24//! assert_eq!(s1, s2);
25//!
26//! let mut buf = Vec::new();
27//! let mut ser = minicbor_serde::Serializer::new(&mut buf);
28//! s1.serialize(&mut ser)?;
29//!
30//! let mut de = minicbor_serde::Deserializer::new(&buf);
31//! let s3 = S::deserialize(&mut de)?;
32//!
33//! assert_eq!(s1, s3);
34//!
35//! # Ok::<_, Box<dyn core::error::Error>>(())
36//! ```
37//!
38//! [serde]: https://serde.rs/
39//! [minicbor-derive]: https://docs.rs/minicbor_derive/
40
41#![cfg_attr(not(feature = "std"), no_std)]
42
43#[cfg(feature = "alloc")]
44extern crate alloc;
45
46mod de;
47mod ser;
48pub mod error;
49
50pub use de::{Deserializer, from_slice};
51pub use ser::Serializer;
52
53#[cfg(feature = "alloc")]
54pub use ser::to_vec;