15 个版本
0.1.10 | 2024 年 1 月 2 日 |
---|---|
0.1.9 | 2023 年 7 月 15 日 |
0.1.7 | 2023 年 1 月 3 日 |
0.1.6 | 2022 年 12 月 17 日 |
0.0.2 | 2017 年 2 月 10 日 |
#218 in 编码
479,510 每月下载量
在 272 个 crate(55 直接) 中使用
41KB
1K SLoC
Serde ignored
了解在反序列化数据时被忽略的键。这个 crate 提供了一个包装器,它可以与任何现有的 Serde Deserializer
一起工作,并对每个被忽略的字段调用一个回调。
例如,您可以使用此功能来警告用户配置文件中存在多余键。
请注意,如果您希望未识别的字段被视为错误,请考虑使用 #[serde)]
属性。
[dependencies]
serde = "1.0"
serde_ignored = "0.1"
use serde::Deserialize;
use std::collections::{BTreeSet as Set, BTreeMap as Map};
#[derive(Debug, PartialEq, Deserialize)]
struct Package {
name: String,
dependencies: Map<String, Dependency>,
}
#[derive(Debug, PartialEq, Deserialize)]
struct Dependency {
version: String,
}
fn main() {
let j = r#"{
"name": "demo",
"dependencies": {
"serde": {
"version": "1.0",
"typo1": ""
}
},
"typo2": {
"inner": ""
},
"typo3": {}
}"#;
// Some Deserializer.
let jd = &mut serde_json::Deserializer::from_str(j);
// We will build a set of paths to the unused elements.
let mut unused = Set::new();
let p: Package = serde_ignored::deserialize(jd, |path| {
unused.insert(path.to_string());
}).unwrap();
// Deserialized as normal.
println!("{:?}", p);
// There were three ignored keys.
let mut expected = Set::new();
expected.insert("dependencies.serde.typo1".to_owned());
expected.insert("typo2".to_owned());
expected.insert("typo3".to_owned());
assert_eq!(unused, expected);
}
许可证
根据您的选择,在以下许可证下获得许可:Apache License, Version 2.0 或 MIT 许可证。除非您明确表示,否则根据 Apache-2.0 许可证定义的,您有意提交给此 crate 的任何贡献都将按照上述方式双许可,不附加任何额外的条款或条件。
依赖项
~110–345KB