Find out the path at which a deserialization error occurred. This crate provides a wrapper that works with any existing Serde Deserializer
and exposes the chain of field names leading to the error.
[dependencies] serde = "1.0" serde_path_to_error = "0.1"
use serde::Deserialize; use std::collections::BTreeMap as Map; #[derive(Deserialize)] struct Package { name: String, dependencies: Map<String, Dependency>, } #[derive(Deserialize)] struct Dependency { version: String, } fn main() { let j = r#"{ "name": "demo", "dependencies": { "serde": { "version": 1 } } }"#; // Some Deserializer. let jd = &mut serde_json::Deserializer::from_str(j); let result: Result<Package, _> = serde_path_to_error::deserialize(jd); match result { Ok(_) => panic!("expected a type error"), Err(err) => { let path = err.path().to_string(); assert_eq!(path, "dependencies.serde.version"); } } }