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次下载
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本身不会实现扩展。然而,我认为这会更加冗长,在运行时效率较低,且容易出错(例如,由于无法阻止用户意外地重复两次一个层,等等)。当然,任何人都可以以这种方式作为层实现额外的扩展。
许可证
本库的发布条款为以下两者之一:
- MIT许可证 (http://opensource.org/licenses/MIT)
- Apache许可证2.0版 (http://www.apache.org/licenses/LICENSE-2.0)
任由您选择。
贡献
除非您明确表示,否则您根据Apache-2.0许可证定义的贡献,旨在包含在作品中,将按上述方式双重授权,没有任何额外条款或条件。
依赖
~0.6–1.4MB
~31K SLoC