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