7个版本

0.3.3 2024年8月17日
0.3.2 2023年11月25日
0.3.1 2023年4月9日
0.3.0 2023年1月31日
0.2.5 2021年12月29日

#258编码

Download history 8583/week @ 2024-05-04 8379/week @ 2024-05-11 8732/week @ 2024-05-18 6506/week @ 2024-05-25 9165/week @ 2024-06-01 6722/week @ 2024-06-08 5818/week @ 2024-06-15 5445/week @ 2024-06-22 5429/week @ 2024-06-29 6389/week @ 2024-07-06 7976/week @ 2024-07-13 6497/week @ 2024-07-20 6724/week @ 2024-07-27 7881/week @ 2024-08-03 5399/week @ 2024-08-10 5732/week @ 2024-08-17

26,702 每月下载量
166 个crate中使用 (10 直接使用)

MIT 许可证

110KB
3K SLoC

CBOR 0x(4+4)9 0x49

github actions crates license docs.rs

“紧凑二进制对象表示(CBOR)是一种数据格式,其设计目标包括极小的代码尺寸、相对较小的消息尺寸以及在无需版本协商的情况下进行扩展的可能性。”

参见 rfc8949

兼容性

core 模块应与 rfc8949 完全兼容,但本crate可能不会实现一些扩展,例如 datetimebignumbigfloat

serde 模块定义了如何在CBOR中表示Rust类型,这不是任何标准,因此不同的crate可能会有不一致的行为。

本库旨在与 serde_cbor 兼容,但不会遵循 serde_cbor 的一些不合理设计。

  • cbor4ii 将单元类型表示为空数组,而不是null。这避免了 serde_cbor 无法区分 NoneSome(()) 的问题。参见 https://github.com/pyfisch/cbor/issues/185
  • cbor4ii 不支持打包模式,将来可能实现,但可能与 serde_cbor 不兼容。如果您需要打包模式,应查看 bincode

性能

在实现中并未针对性能进行特定优化,但基准测试显示其性能略优于 serde_cbor

并且它支持零拷贝反序列化和 serde 的 deserialize_ignored_any,因此在某些场景中可能比不支持此类功能的crate表现更好。

鲁棒性

解码部分已进行模糊测试,在解码过程中不应崩溃或恐慌。

serde模块的解码具有深度限制,以防止由特别构造的输入引起的栈溢出或OOM。如果您想关闭深度检查或调整参数,可以自己实现dec::Read特质。

许可证

本项目采用MIT许可证

依赖项

约230KB