Rust (de)serialization for the Python pickle format.
Switch branches/tags
Clone or download

Serde Pickle Serialization Library

Build status Latest Version


This crate is a Rust library for parsing and generating Python pickle streams. It is built upon Serde, a high performance generic serialization framework.


This crate works with Cargo and can be found on with a Cargo.toml like:

serde = "*"
serde-pickle = "*"


As with other serde serialization implementations, this library provides toplevel functions for simple en/decoding of supported objects.


extern crate serde;
extern crate serde_pickle;

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 selects pickle version 3.
    let serialized = serde_pickle::to_vec(&map, true).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.
    let deserialized = serde_pickle::from_slice(&serialized).unwrap();
    assert_eq!(map, deserialized);

Serializing and deserializing structs and enums that implement the serde-provided traits is supported, and works analogous to other crates (using serde_derive).