#deserialize #cbor #serialization #binary-serialization

cbor_enhanced

Cbor de/serialization library making use of lifetimes to support zero copy deserialization. Several iana tags are supported but need to be activated via feature flags

2 releases

0.1.1 Dec 26, 2020
0.1.0 Jun 28, 2020

#1529 in Parser implementations

MIT/Apache

105KB
2.5K SLoC

Cbor enhanced library

Actions Status Crate API

Inspired by cbor_event but making use of lifetimes to support zero copy deserialization. In addition several iana tags are supported but need to be activated via feature flags.

Supported tags

Tag Description Implementation notes
64-82 Typed arrays Either direct transmution for the brave or safe parsing for the cautious
80, 81, 82, 85, 86 Typed float arrays Either direct transmution for the brave or safe parsing for the cautious, f16 is only supported in big-endian format
260, 261 Network address Direct de/serialization of network address
0, 1, 1001 DateTime Directly de/serialize chrono date time types with defined precision
2, 3 BigInt, BigUint Directly de/serialize num_bigint BigInt, BigUint
37 Uuid Directly de/serialize uuid using uuid crate
35 Regex Directly de/serialize regex using regex crate
36 Mime type Directly de/serialize mime types using mime crate
103 Geographic Coordinate Directly de/serialize geographic coordinates

Limits

  • Infinite strings and bytes are not supported since they require allocation
  • f16 LE typed array not supported

Features

  • Zero-Copy deserialization
  • Support for various iana tags
  • custom derive macro for serializing structs

Derive macro

Deriving cbor_protocol enables you to serialize/deserialize a struct into a Map<uint,Value> Where the keys for the map are the property id's. The derive macro requires nightly for posiioned compile error reporting.

#[derive(cbor_protocol, Clone, Eq, PartialEq, Debug)]
#[reserved(5, 6, 7)]
struct BlaStruct {
    #[id(1)]
    #[default("none")]
    name: String,
    #[id(2)]
    value: i32,
}

License

MIT and Apache

Dependencies

~2.2–3.5MB
~70K SLoC