#python #pickle #serialization #serde

serde-pickle-rs

一个基于 serde 的用于 Python pickle 格式的序列化库

3 个稳定版本

1.0.2 2023年11月12日
1.0.1 2023年11月11日

#3#pickle

MIT/Apache

320KB
3.5K SLoC

Serde Pickle 序列化库

Build Status Latest Version

文档

此 crate 是一个 Rust 库,用于解析和生成 Python pickle 流,从 serde-pickle 分支而来。该 crate 一段时间没有更新,并且不支持 pickle 规范的一些部分(例如 PERSID),这是解析 Meta LlaMA 模型所必需的。

它基于 Serde,一个高性能的通用序列化框架。

安装

此 crate 与 Cargo 一起工作,可以在 crates.io 上找到,其中包含一个 Cargo.toml,如下所示:

[dependencies]
serde = "1.0.192"
serde-pickle-rs = "1.0.1"

要求

最低支持的 Rust 版本是 1.73.0。

使用

与其他 serde 序列化实现一样,此库提供了对支持的对象进行简单编解码的顶层函数。

示例

use std::collections::BTreeMap;

fn main() {
    let mut map = BTreeMap::new();
    map.insert("x".to_string(), 1.0);
    map.insert("y".to_string(), 2.0);

    // Serialize the map into a pickle stream.
    // The second argument are serialization options.
    let serialized = serde_pickle_rs::to_vec(&map, Default::default()).unwrap();

    // Deserialize the pickle stream back into a map.
    // Because we compare it to the original `map` below, Rust infers
    // the type of `deserialized` and lets serde work its magic.
    // The second argument are additional deserialization options.
    let deserialized = serde_pickle_rs::from_slice(&serialized, Default::default()).unwrap();
    assert_eq!(map, deserialized);
}

支持序列化和反序列化实现 serde 提供的特质的结构和枚举,并且与其他 crate(使用 serde_derive)类似。

依赖项

~0.9–1.6MB
~35K SLoC