[][src]Crate serde_path_to_error

githubcrates-iodocs-rs


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.

Example

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

Structs

Deserializer

Deserializer adapter that records path to deserialization errors.

Error

Original deserializer error together with the path at which it occurred.

Path

Path to the error value in the input, like dependencies.serde.typo1.

Segments

Iterator over segments of a path.

Track

State for bookkeeping across nested deserializer calls.

Enums

Segment

Single segment of a path.

Functions

deserialize

Entry point. See crate documentation for an example.