# Serde path to error

[github](https://github.com/dtolnay/path-to-error)
[crates.io](https://crates.io/crates/serde_path_to_error)
[docs.rs](https://docs.rs/serde_path_to_error)
[build status](https://github.com/dtolnay/path-to-error/actions?query=branch%3Amaster)

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.

```toml
[dependencies]
serde = "1.0"
serde_path_to_error = "0.1"
```

```rust
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");
        }
    }
}
```


#### 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.

