7个版本 (4个稳定版)

1.3.0 2024年4月30日
1.1.2 2023年7月21日
1.1.1 2022年9月27日
1.1.0 2022年4月19日
0.8.2 2015年11月10日

#8 in 编码

Download history 245341/week @ 2024-04-30 231469/week @ 2024-05-07 254265/week @ 2024-05-14 271124/week @ 2024-05-21 318585/week @ 2024-05-28 387020/week @ 2024-06-04 378214/week @ 2024-06-11 353982/week @ 2024-06-18 414721/week @ 2024-06-25 365212/week @ 2024-07-02 371798/week @ 2024-07-09 374113/week @ 2024-07-16 387122/week @ 2024-07-23 374279/week @ 2024-07-30 349242/week @ 2024-08-06 370104/week @ 2024-08-13

1,550,398 每月下载量
用于 1,458 个crate(608直接使用)

MIT 许可证

195KB
4K SLoC

MessagePack + Serde

此crate将Rust MessagePack库与serde连接起来,提供轻松序列化和反序列化Rust内置类型、标准库和自定义数据结构的能力。

动机示例

let buf = rmp_serde::to_vec(&(42, "the Answer")).unwrap();

assert_eq!(
    vec![0x92, 0x2a, 0xaa, 0x74, 0x68, 0x65, 0x20, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72],
    buf
);

assert_eq!((42, "the Answer"), rmp_serde::from_slice(&buf).unwrap());

基于类型的序列化和反序列化

Serde提供了一种通过序列化API将值低模板序列化和反序列化到MessagePack的机制。

要能够序列化一块数据,它必须实现serde::Serialize trait。要能够反序列化一块数据,它必须实现serde::Deserialize trait。Serde提供了一种注解,可以自动生成这些trait的代码:#[derive(Serialize, Deserialize)]

示例

use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use rmp_serde::{Deserializer, Serializer};

#[derive(Debug, PartialEq, Deserialize, Serialize)]
struct Human {
    age: u32,
    name: String,
}

fn main() {
    let mut buf = Vec::new();
    let val = Human {
        age: 42,
        name: "John".into(),
    };

    val.serialize(&mut Serializer::new(&mut buf)).unwrap();
}

高效存储&[u8]类型

MessagePack可以高效地存储二进制数据。然而,Serde的标准派生实现默认不使用二进制表示。Serde更喜欢将像&[u8; N]Vec<u8>这样的类型表示为任意/未知类型的对象数组,而不是字节数组切片。这会在存储大小上增加大约50%的开销。

使用 serde_bytes 将您的数据包装起来,以便快速高效地存储 blob。或者,rmp_serde 中配置覆盖,强制使用字节切片

依赖项

~285–610KB
~12K SLoC