#反序列化 #cbor #序列化 #二进制 #二进制编码

cbor_enhanced

Cbor 的反序列化/序列化库,利用生命周期支持零拷贝反序列化。支持多个 IANA 标签,但需要通过功能标志激活

2 个版本

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

#2604解析器实现

MIT/Apache

105KB
2.5K SLoC

Cbor enhanced 库

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 标签
  • 用于序列化结构体的自定义 derive 宏

Derive 宏

使用 cbor_protocol derive 宏可以将结构体序列化/反序列化为 Map。Map 的键是属性 id。该 derive 宏需要 nightly 以实现定位编译错误报告。

#[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

依赖

~2.4–4MB
~73K SLoC