2个版本
0.1.1 | 2024年4月24日 |
---|---|
0.1.0 | 2024年4月23日 |
#583 in 编码
每月59次下载
50KB
1K SLoC
为serde
提供最完整的数据序列化树。
Save
代表整个serde数据模型,包括结构体名称、字段名称和枚举变体信息。这意味着它可以在结构体序列化之前拦截它们,并在无损转发它们。
Save
可以选择在序列化树中持久化错误,而不是中断。这是一个零成本的选项 - 有关更多信息,请参阅Save::Error
上的文档。
#[derive(Serialize)]
struct MyStruct {
system_time: SystemTime,
path_buf: PathBuf,
normal_string: String,
}
// These will fail to serialize
let before_unix_epoch = SystemTime::UNIX_EPOCH - Duration::from_secs(1);
let non_utf8_path = PathBuf::from(OsString::from_vec(vec![u8::MAX]));
let my_struct = MyStruct {
system_time: before_unix_epoch,
path_buf: non_utf8_path,
normal_string: String::from("this is a string"), // this is fine
};
// By default errors are short-circuiting
assert_eq!(
save(&my_struct).unwrap_err().to_string(),
"SystemTime must be later than UNIX_EPOCH"
);
// But you can persist and inspect them in-tree if you prefer.
assert_eq!(
save_errors(&my_struct), // use this method instead
Save::strukt(
"MyStruct",
[
("system_time", Save::error("SystemTime must be later than UNIX_EPOCH")),
("path_buf", Save::error("path contains invalid UTF-8 characters")),
("normal_string", Save::string("this is a string")),
]
)
)
Serializer
还可以检查serde协议的实现是否正确。
依赖项
~110–350KB