7个版本 (4个稳定版)
1.3.0 | 2024年4月30日 |
---|---|
1.1.2 | 2023年7月21日 |
1.1.1 | 2022年9月27日 |
1.1.0 |
|
0.8.2 |
|
#8 in 编码
1,550,398 每月下载量
用于 1,458 个crate(608直接使用)
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