Crate serde_ignored [] [src]

#[macro_use]
extern crate serde_derive;

extern crate serde;
extern crate serde_json;
extern crate serde_ignored;

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": "0.9",
            "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: "0.9".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 dependencies.serde.typo1.

Functions

deserialize

Entry point. See crate documentation for an example.