2 个版本
0.1.1 | 2020 年 12 月 26 日 |
---|---|
0.1.0 | 2020 年 6 月 28 日 |
#2604 在 解析器实现
105KB
2.5K SLoC
Cbor enhanced 库
受 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
#[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