#serde #key #ignored #fields #data #callback #find

no-std serde_ignored

了解在反序列化数据时被忽略的键

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 编码

Download history 103744/week @ 2024-04-20 110192/week @ 2024-04-27 109511/week @ 2024-05-04 107270/week @ 2024-05-11 109117/week @ 2024-05-18 102680/week @ 2024-05-25 115836/week @ 2024-06-01 109775/week @ 2024-06-08 113432/week @ 2024-06-15 108451/week @ 2024-06-22 103467/week @ 2024-06-29 114453/week @ 2024-07-06 110365/week @ 2024-07-13 114487/week @ 2024-07-20 121901/week @ 2024-07-27 113454/week @ 2024-08-03

479,510 每月下载量
272 个 crate(55 直接) 中使用

MIT/Apache

41KB
1K SLoC

Serde ignored

github crates.io docs.rs build status

了解在反序列化数据时被忽略的键。这个 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.0MIT 许可证
除非您明确表示,否则根据 Apache-2.0 许可证定义的,您有意提交给此 crate 的任何贡献都将按照上述方式双许可,不附加任何额外的条款或条件。

依赖项

~110–345KB