5个版本
0.0.5 | 2021年6月21日 |
---|---|
0.0.4 | 2021年6月9日 |
0.0.3 | 2021年6月9日 |
0.0.2 | 2021年5月31日 |
0.0.1 | 2021年5月31日 |
#1967 in 过程宏
11KB
115 行
Serde Versions Derive
serde_versions_derive
导出一个属性宏,为结构体添加版本支持。
在序列化命名字段结构体时,它会自动添加一个包含版本的新的字段。它还允许将带有版本的类型直接反序列化回不带版本的一个。
在内部,它通过创建一个新的结构体来实现,这个结构体包装了原始结构体并添加了一个版本字节字段。
这个新结构体使用#[serde(flatten)]
来按预期进行序列化。原始结构体使用#[serde(to, from)]
在序列化时添加版本字段,在反序列化时移除它。
用法
#[version(3)]
#[derive(Clone, Serialize, Deserialize)]
struct S {
i: i32,
}
这将生成以下内容
#[derive(Clone, Serialize, Deserialize)]
#[serde(into = "_Sv3", from = "_Sv3")]
struct S {
i: i32,
}
#[derive(Clone, Serialize, Deserialize)]
struct _Sv3 {
version: u8,
#[serde(flatten)]
inner: S
}
// plus implementations of To, From and to_versioned() for S
并且序列化为
{
"version": 3,
"i": 0
}
这支持带有类型参数的类型,但这些类型必须实现Clone trait约束。
例如:
# use serde::{Deserialize, Serialize};
# use serde_versions_derive::version;
#[version(3)]
#[derive(Clone, Serialize, Deserialize)]
struct S<T: Clone> {
t: T,
}
依赖项
~1.5MB
~36K SLoC