Vendored serde_path_to_error crate for Rust
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
David Tolnay 991c527808
Unpin CI miri toolchain
Fixed in nightly-2026-02-13.
2026-02-15 19:07:30 -08:00
.github Unpin CI miri toolchain 2026-02-15 19:07:30 -08:00
src Release 0.1.20 2025-09-15 08:05:48 -07:00
tests Extend test of serializing non-string keys 2023-07-02 14:06:55 -07:00
.gitignore More precise gitignore patterns 2025-01-23 01:34:39 -08:00
Cargo.toml Raise required compiler to Rust 1.71 2026-02-08 13:46:49 -08:00
LICENSE-APACHE Sync license text with rust-lang repos 2022-12-30 12:00:49 -08:00
LICENSE-MIT Initial commit 2019-01-06 14:10:14 -08:00
README.md Update build status badge 2022-12-15 17:52:41 -08:00

Serde path to error

github crates.io docs.rs build status

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

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.