17 个版本 (9 个破坏性版本)
新 0.12.0 | 2024 年 8 月 9 日 |
---|---|
0.11.0 | 2024 年 7 月 6 日 |
0.10.0 | 2024 年 6 月 3 日 |
0.6.0 | 2024 年 3 月 4 日 |
0.1.7 | 2022 年 11 月 11 日 |
#813 in Rust 模式
每月 98 次下载
在 2 个 crate 中使用 (通过 psibase)
60KB
1.5K SLoC
Rust 对 fracpack 格式的支持。
Psibase 使用一种新的二进制格式 fracpack
,具有以下目标
- 快速打包和解包数据,适用于服务间通信、节点间通信、区块链与外部通信以及数据库存储。
- 前后兼容性;它支持在结构体和元组的末尾添加新的可选字段,即使它们嵌入在可变长度向量、固定长度数组、可选和其他结构体和元组中。
- 可选的读取而不解包(几乎零复制);有助于高效处理大量数据。TODO:此库尚未实现此功能。
- 不需要代码生成器来支持 C++ 或 Rust;宏和元编程处理它。
- 与 Cap 'n' Proto 的压缩算法结合使用时,可进行有效的压缩。
示例使用
use fracpack::{Pack, Unpack, Result};
#[derive(Pack, Unpack, PartialEq, Debug)]
#[fracpack(fracpack_mod = "fracpack")]
struct Example {
a_string: String,
a_tuple: (u32, String),
}
let orig = Example {
a_string: "content".into(),
a_tuple: (1234, "5678".into()),
};
// Convert to fracpack format
let packed: Vec<u8> = orig.packed();
// Convert from fracpack format
let unpacked = Example::unpacked(&packed)?;
assert_eq!(orig, unpacked);
注意: #[fracpack(fracpack_mod = "fracpack")]
只在直接使用 fracpack
库而不是通过 psibase crate 时需要。
注意
很容易不小心将固定大小的数组引用(&[T;7]
)转换为切片(&[T]
)。这对fracpack很重要,因为它对这两种类型有不同的、不兼容的编码。
依赖项
~3MB
~65K SLoC