serde-ignored
serde-ignored copied to clipboard
Expose field name suggestions for ignored fields that are typos
For example, if deserializing something like
[dependencies]
serde = { version = "1.0.126", optional = true, feautres = ["derive"] }
With something like
let manifest: TomlManifest = serde_ignored::deserialize(toml, |path| {
unused.insert(format!("{}", path));
})?;
We could have serde-ignored (perhaps behind a feature flag) leverage something like lev_distance to give suggestions - which the callsite could use as suggestions
Possible new call syntax
let manifest: TomlManifest = serde_ignored::deserialize_with_suggestions(toml, 2 /* lev distance */, |path: Path, suggestions: Vec<Path>| {
if ! suggestions.empty() {
print("{} unused. Did you mean {}", path, suggestions[0]);
}
unused.insert(stringify(path));
})?;
^ which would ideally print "dependencies.serde.feautres unused. Did you mean dependencies.serde.features"
Inspired by https://github.com/rust-lang/cargo/issues/5264 and https://github.com/rust-lang/cargo/issues/9731