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解析器实现

Download history 898/week @ 2024-04-23 846/week @ 2024-04-30 781/week @ 2024-05-07 863/week @ 2024-05-14 1327/week @ 2024-05-21 1346/week @ 2024-05-28 1933/week @ 2024-06-04 2984/week @ 2024-06-11 2940/week @ 2024-06-18 3515/week @ 2024-06-25 2290/week @ 2024-07-02 1490/week @ 2024-07-09 1461/week @ 2024-07-16 1612/week @ 2024-07-23 1170/week @ 2024-07-30 1307/week @ 2024-08-06

5,716 每月下载量
16 个 crate 中使用 (8 直接使用)

Apache-2.0

105KB
2K SLoC

Packable 是一个二进制序列化和反序列化框架。

设计

如果一个类型实现了 Packable trait,则该类型的值可以序列化和反序列化。每个类型使用的序列化策略由用户决定。然而,Packable 也可以被推导,这提供了一个一致的序列化策略。

有关此crate设计的更多信息,请参阅 PackableunpackerpackerUnpackErrorUnpackErrorExt 的文档。

no_std 兼容性

Packable 与 no_std 兼容。这是通过引入 PackerUnpacker trait 来实现的,以抽象化任何 IO 操作,而不依赖于 std::io。这还有一个额外的优点,即允许我们从不同类型的缓冲区中打包和解包值。

实现了 Packable 的类型

Packable trait 为所有有大小整数类型实现,将值编码为字节序列,采用小端序。

布尔值按照 Rust 的数据布局打包,即 true 打包为一个字节,false 打包为 0 字节。但是,布尔值的解包不是很严格,任何非零字节都被解包为 true

以下类型如 Box<[T]>[T; N]Option<T> 实现了 Packable,前提是 T 实现了 Packable

此crate还提供了在 bounded 模块下的有界整数,它具有额外的语法检查,以确保反序列化的值在范围内。还可以通过使用 prefix 模块中提供的数据类型来序列化和反序列化值序列,这些数据类型表示具有长度前缀的线性值序列。

查看 Packableimpl 部分以获取更多信息。

特性

io

此特性提供了 IoPackerIoUnpacker 类型,允许从实现 WriteRead 的值进行打包和解包。

primitive-types

此特性实现了对 U256Packable,将其值作为小端序的字节数组编码。

serde

此特性为 boundedprefix 模块中提供的数据类型派生了 SerializeDeserialize

std

此特性为该crate提供的所有错误类型实现了 Error

usize

此特性为 usizeisizeVec<T>Box<[T]>String 实现了 Packable。这是通过将指针大小整数序列化和反序列化为64位整数来完成的。此特性对于指针宽度大于64的目标将不起作用。

许可证:Apache-2.0

依赖项

~2.8-4MB
~76K SLoC