Crate serde_ignored
source · [−]Expand description
Find out about keys that are ignored when deserializing data. This crate
provides a wrapper that works with any existing Serde Deserializer and
invokes a callback on every ignored field.
You can use this to warn users about extraneous keys in a config file, for example.
Note that if you want unrecognized fields to be an error, consider using the
#[serde(deny_unknown_fields)] attribute instead.
Example
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,
}
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());
})?;
assert_eq!(p, Package {
name: "demo".to_owned(),
dependencies: {
let mut map = Map::new();
map.insert("serde".to_owned(), Dependency {
version: "1.0".to_owned(),
});
map
},
});
assert_eq!(unused, {
let mut expected = Set::new();
expected.insert("dependencies.serde.typo1".to_owned());
expected.insert("typo2".to_owned());
expected.insert("typo3".to_owned());
expected
});
Structs
Deserializer adapter that invokes a callback with the path to every unused field of the input.
Enums
Path to the current value in the input, like dependencies.serde.typo1.
Functions
Entry point. See crate documentation for an example.