3 个版本
1.0.0-rc.3 | 2022 年 8 月 3 日 |
---|
#1636 在 编码
61 每月下载量
10KB
103 行
Serde Compact
宏,用于压缩使用 serde 序列化的结构体和枚举。
字段名称和枚举标签被缩短,并使用 #[serde(rename = "")] 宏进行映射,以交换序列化数据的互操作性,以换取最多 50% 的尺寸缩减。在 Rust 中进行序列化和反序列化时使用。
use serde_compact::compact;
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize, Debug)]
enum CallbackQuery {
ReservationConfirmation { event_id: i32, user_id: i32, ticket_type: i32 },
// ...
}
#[compact] // <= add before deriving Serialize
#[derive(Serialize, Deserialize, PartialEq, Debug)]
enum CompactCallbackQuery {
ReservationConfirmation { event_id: i32, user_id: i32, ticket_type: i32 },
// ...
}
fn main() {
// Original serialization
let s = CallbackQuery::ReservationConfirmation {event_id: 1, user_id: 1, ticket_type: 1};
let ser_s = serde_json::to_string(&s).unwrap();
assert_eq!(ser_s, r#"{"ReservationConfirmation":{"event_id":1,"user_id":1,"ticket_type":1}}"#);
assert_eq!(ser_s.len(), 70);
// Compacted
let cs = CompactCallbackQuery::ReservationConfirmation {event_id: 1, user_id: 1, ticket_type: 1};
let ser_cs = serde_json::to_string(&cs).unwrap();
assert_eq!(ser_cs, r#"{"a":{"b":1,"d":1,"c":1}}"#);
assert_eq!(ser_cs.len(), 25);
let de: CompactCallbackQuery = serde_json::from_str(&ser_cs).unwrap();
assert_eq!(cs, de);
}
依赖关系
~1.5MB
~36K SLoC