minicbor 0.5.1

A small CBOR codec suitable for no_std environments.
Documentation
A small [CBOR] codec suitable for `no_std` environments. The crate is organised around the following entities: - [`Encoder`] and [`Decoder`] for type-directed encoding and decoding of values. - [`Encode`] and [`Decode`] traits which can be implemented for any type that should be encoded to or decoded from CBOR. They are similar to [serde]'s `Serialize` and `Deserialize` traits but do not abstract over the encoder/decoder. As mentioned, encoding and decoding proceeds in a type-directed way, i.e. by calling methods for expected data item types, e.g. [`Decoder::u32`] or [`Encoder::str`]. In addition there is support for data type inspection. The `Decoder` can be queried for the current data type which returns a [`data::Type`] that can represent every possible CBOR type and decoding can thus proceed based on this information. Optionally, `Encode` and `Decode` can be derived for structs and enums using the respective derive macros. See [`minicbor_derive`] for details. # Example: generic encoding and decoding ``` use minicbor::{Encode, Decode}; let input = ["hello", "world"]; let mut buffer = [0u8; 128]; minicbor::encode(&input, buffer.as_mut())?; let output: [&str; 2] = minicbor::decode(buffer.as_ref())?; assert_eq!(input, output); # Ok::<_, Box>(()) ``` # Example: ad-hoc encoding ``` use minicbor::Encoder; let mut buffer = [0u8; 128]; let mut encoder = Encoder::new(&mut buffer[..]); encoder.begin_map()? // using an indefinite map here .str("hello")?.str("world")? .str("submap")?.map(2)? .u8(1)?.bool(true)? .u8(2)?.bool(false)? .u16(34234)?.array(3)?.u8(1)?.u8(2)?.u8(3)? .bool(true)?.null()? .end()?; # Ok::<_, Box>(()) ``` # Example: ad-hoc decoding ``` use minicbor::{data, Decoder}; let input = [ 0xc0, 0x74, 0x32, 0x30, 0x31, 0x33, 0x2d, 0x30, 0x33, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x34, 0x3a, 0x30, 0x30, 0x5a ]; let mut decoder = Decoder::new(&input[..]); assert_eq!(data::Tag::DateTime, decoder.tag()?); assert_eq!("2013-03-21T20:04:00Z", decoder.str()?); # Ok::<_, Box>(()) ``` [CBOR]: https://tools.ietf.org/html/rfc7049 [serde]: https://serde.rs