Crate minicbor[−][src]
A small CBOR codec suitable for no_std environments.
The crate is organised around the following entities:
-
EncoderandDecoderfor type-directed encoding and decoding of values. -
EncodeandDecodetraits which can be implemented for any type that should be encoded to or decoded from CBOR. They are similar to serde’sSerializeandDeserializetraits but do not abstract over the encoder/decoder.
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. It is also possible to just
tokenize the input bytes using a Tokenizer, i.e.
an Iterator over CBOR Tokens.
Optionally, Encode and Decode can be derived for structs and enums
using the respective derive macros (requires feature "derive").
See minicbor_derive for details.
For I/O support see minicbor-io.
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);
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()?;
Example: ad-hoc decoding
use minicbor::Decoder; use minicbor::data::Tag; 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!(Tag::DateTime, decoder.tag()?); assert_eq!("2013-03-21T20:04:00Z", decoder.str()?);
Example: tokenization
use minicbor::display; use minicbor::decode::{Token, Tokenizer}; let input = [0x83, 0x01, 0x9f, 0x02, 0x03, 0xff, 0x82, 0x04, 0x05]; assert_eq!("[1, [_ 2, 3], [4, 5]]", format!("{}", display(&input))); let tokens = Tokenizer::new(&input).collect::<Result<Vec<Token>, _>>()?; assert_eq! { &tokens[..], &[Token::Array(3), Token::U8(1), Token::BeginArray, Token::U8(2), Token::U8(3), Token::Break, Token::Array(2), Token::U8(4), Token::U8(5)] };
Re-exports
pub use decode::Decode; |
pub use encode::Encode; |
Modules
| bytes | Newtypes for |
| data | Information about CBOR data types and tags. |
| decode | Traits and types for decoding CBOR. |
| encode | Traits and types for encoding CBOR. |
Structs
| Decoder | A non-allocating CBOR decoder. |
| Encoder | A non-allocating CBOR encoder writing encoded bytes to the given |
Functions
| decode | Decode a type implementing |
| display | Display the given CBOR bytes in diagnostic notation. |
| encode | Encode a type implementing |
| to_vec | Encode a type implementing |
Derive Macros
| Decode | Derive the |
| Encode | Derive the |