6个版本 (破坏性)

0.6.0 2024年1月14日
0.5.0 2023年11月24日
0.4.0 2022年8月20日
0.3.0 2022年8月18日
0.1.0 2022年8月9日

#1375编码

每月35次下载

MIT/Apache

98KB
2.5K SLoC

borc: 正确实现CBOR

borc是CBOR,紧凑二进制对象表示法的实现,如RFC 8949中定义。CBOR是一种简单但功能强大的数据格式,其潜力至今尚未得到充分利用,特别是在Rust领域(由于Serde的统治地位,它无法也不太可能支持其完整的功能集)。borc旨在成为CBOR和基于CBOR协议的一站式解决方案。

状态

borc提供基本的CBOR数据模型(不进行任何特殊处理)和扩展数据模型。这两种模型都以流和基于树的形式提供,类似于XML世界中的SAX和DOM。

以下扩展目前已实现

  • 使用chrono crate(需要chrono功能)的日期和时间
  • 使用num-bigint crate(需要num-bigint功能)的大数

为确保扩展实现能够在保持向后兼容性的同时添加新的扩展,采取了以下措施

  • 用于数据结构的枚举被标记为#[non_exhaustive]。这允许在任何时候添加额外的变体,而不会在编译时破坏客户端。
  • 如果扩展复杂(足以导致处理速度明显减慢)或需要额外的依赖项,则扩展在编译时是可选的。
  • 扩展在运行时也是可选的,按编码器/解码器逐个进行,这样所有用户都可以安全地简单地忽略或使用unreachable!()来处理他们不关心的扩展(因为这些扩展实际上不会出现)。

理论上,追求分层实现可能更好,其中扩展作为较低级别、功能较弱的实现上的过滤器来实现。这将允许外部crate实现borc本身不会实现扩展。然而,我认为这会更加冗长,在运行时效率较低,且容易出错(例如,由于无法阻止用户意外地重复两次一个层,等等)。当然,任何人都可以以这种方式作为层实现额外的扩展。

许可证

本库的发布条款为以下两者之一:

任由您选择。

贡献

除非您明确表示,否则您根据Apache-2.0许可证定义的贡献,旨在包含在作品中,将按上述方式双重授权,没有任何额外条款或条件。

依赖

~0.6–1.4MB
~31K SLoC