Crate serde_ignored[−][src]
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 | Deserializer adapter that invokes a callback with the path to every unused field of the input. |
Enums
Path | Path to the current value in the input, like |
Functions
deserialize | Entry point. See crate documentation for an example. |