Crate serde_path_to_error

Source
Expand description

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.
Serializer
Serializer adapter that records path to serialization errors.
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.
serialize
Entry point for tracking path to Serialize error.