16个版本 (9个破坏性更新)

0.10.0 2024年2月9日
0.9.0 2023年11月17日
0.8.0 2023年11月14日
0.7.0 2022年10月10日
0.2.1 2022年2月11日

#44#binary-serialization

Download history 663/week @ 2024-04-02 645/week @ 2024-04-09 754/week @ 2024-04-16 916/week @ 2024-04-23 886/week @ 2024-04-30 806/week @ 2024-05-07 881/week @ 2024-05-14 1343/week @ 2024-05-21 1361/week @ 2024-05-28 1949/week @ 2024-06-04 2991/week @ 2024-06-11 2953/week @ 2024-06-18 3551/week @ 2024-06-25 2242/week @ 2024-07-02 1498/week @ 2024-07-09 1459/week @ 2024-07-16

9,283 每月下载量
17 个crate中使用 (通过 packable)

Apache-2.0

35KB
742

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

设计

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

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

no_std 兼容性

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

实现 Packable 特性的类型

Packable 特性为所有有大小整数类型实现,通过将值编码为小端顺序的字节数组。

布尔值按照Rust的数据布局打包,这意味着 true 被打包为一个字节的 1,而 false 被打包为一个字节的 0。然而,布尔值解包较为宽松,将任何非零字节解包为 true

以下类型,如Box<[T]>[T; N]Option<T>,当类型T实现了Packable接口时,也将实现Packable接口。

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

有关更多信息,请查看Packableimpl部分。

特性

io

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

primitive-types

此特性实现了Packable接口,用于U256编码,其值以小端顺序的字节数组表示。

serde

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

std

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

usize

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

许可证:Apache-2.0

依赖项

~3MB
~56K SLoC