#deserialize #tags #cbor #zero-copy #iana #serialization #macro

nightly macro cbor_enhanced_derive_protocol

cbor_enhanced的派生宏实现

2个版本

0.1.1 2020年12月26日
0.1.0 2020年6月28日

#23 in #iana


cbor_enhanced中使用

MIT/Apache

33KB
871

Cbor增强库

Actions Status Crate API

cbor_event启发,但利用生命周期来支持零拷贝反序列化。此外,支持多个iana标签,但需要通过功能标志来激活。

支持的标签

标签 描述 实现说明
64-82 类型化数组 要么直接传输(勇敢者之路),要么安全解析(谨慎者之路)
80, 81, 82, 85, 86 类型化浮点数组 要么直接传输(勇敢者之路),要么安全解析(谨慎者之路),f16只支持大端格式
260, 261 网络地址 直接反/序列化网络地址
0, 1, 1001 日期时间 直接反/序列化具有定义精度的chrono日期时间类型
2, 3 BigInt, BigUint 直接反/序列化num_bigint BigInt, BigUint
37 Uuid 直接使用uuid crate反/序列化uuid
35 正则表达式 直接使用regex crate反/序列化正则表达式
36 MIME类型 直接使用mime crate反/序列化MIME类型
103 地理坐标 直接反/序列化地理坐标

限制

  • 由于需要分配,不支持无限字符串和字节
  • 不支持f16 LE类型化数组

功能

  • 零拷贝反序列化
  • 支持各种iana标签
  • 自定义派生宏以序列化结构体

派生宏

使用cbor_protocol派生宏可以将结构体序列/反序列化为Map<uint,Value>,其中映射的键是属性ID。

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

许可

MIT和Apache

依赖关系

~1.5MB
~35K SLoC