21 个不稳定版本 (10 个破坏性更新)
| 0.11.0 | 2024年2月9日 |
|---|---|
| 0.10.0 | 2023年11月17日 |
| 0.8.1 | 2023年5月2日 |
| 0.8.0 | 2023年3月31日 |
| 0.2.1 | 2022年2月11日 |
#209 在 解析器实现
5,716 每月下载量
在 16 个 crate 中使用 (8 直接使用)
105KB
2K SLoC
Packable 是一个二进制序列化和反序列化框架。
设计
如果一个类型实现了 Packable trait,则该类型的值可以序列化和反序列化。每个类型使用的序列化策略由用户决定。然而,Packable 也可以被推导,这提供了一个一致的序列化策略。
有关此crate设计的更多信息,请参阅 Packable、unpacker、packer、UnpackError 和 UnpackErrorExt 的文档。
no_std 兼容性
Packable 与 no_std 兼容。这是通过引入 Packer 和 Unpacker trait 来实现的,以抽象化任何 IO 操作,而不依赖于 std::io。这还有一个额外的优点,即允许我们从不同类型的缓冲区中打包和解包值。
实现了 Packable 的类型
Packable trait 为所有有大小整数类型实现,将值编码为字节序列,采用小端序。
布尔值按照 Rust 的数据布局打包,即 true 打包为一个字节,false 打包为 0 字节。但是,布尔值的解包不是很严格,任何非零字节都被解包为 true。
以下类型如 Box<[T]>、[T; N] 和 Option<T> 实现了 Packable,前提是 T 实现了 Packable。
此crate还提供了在 bounded 模块下的有界整数,它具有额外的语法检查,以确保反序列化的值在范围内。还可以通过使用 prefix 模块中提供的数据类型来序列化和反序列化值序列,这些数据类型表示具有长度前缀的线性值序列。
查看 Packable 的 impl 部分以获取更多信息。
特性
io
此特性提供了 IoPacker 和 IoUnpacker 类型,允许从实现 Write 和 Read 的值进行打包和解包。
primitive-types
此特性实现了对 U256 的 Packable,将其值作为小端序的字节数组编码。
serde
此特性为 bounded 和 prefix 模块中提供的数据类型派生了 Serialize 和 Deserialize。
std
此特性为该crate提供的所有错误类型实现了 Error。
usize
此特性为 usize、isize、Vec<T>、Box<[T]> 和 String 实现了 Packable。这是通过将指针大小整数序列化和反序列化为64位整数来完成的。此特性对于指针宽度大于64的目标将不起作用。
许可证:Apache-2.0
依赖项
~2.8-4MB
~76K SLoC