MCPcopy Index your code
hub / github.com/dtolnay/serde-ignored

github.com/dtolnay/serde-ignored @0.1.14

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.1.14 ↗ · + Follow
93 symbols 101 edges 2 files 9 documented · 10%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Serde ignored

github crates.io docs.rs build status

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.

[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);
}

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Core symbols most depended-on inside this repo

Shape

Method 73
Class 12
Function 6
Enum 2

Languages

Rust100%

Modules by API surface

src/lib.rs82 symbols
tests/test.rs11 symbols

For agents

$ claude mcp add serde-ignored \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page