deserr 0.6.4

Deserialization library with focus on error handling
Documentation
use deserr::{deserialize, errors::JsonError, Deserr};
use insta::assert_debug_snapshot;
use serde_json::json;

#[test]
fn map() {
    #[allow(unused)]
    #[derive(Debug, Deserr)]
    struct Struct {
        #[deserr(map = square)]
        doggo: usize,
    }

    fn square(n: usize) -> usize {
        n * n
    }

    let data = deserialize::<Struct, _, JsonError>(json!({ "doggo": 1 })).unwrap();

    assert_debug_snapshot!(data, @r###"
    Struct {
        doggo: 1,
    }
    "###);

    let data = deserialize::<Struct, _, JsonError>(json!({})).unwrap_err();

    assert_debug_snapshot!(data, @r###"
    JsonError(
        "Missing field `doggo`",
    )
    "###);
}

#[test]
fn map_and_default() {
    #[allow(unused)]
    #[derive(Debug, Deserr)]
    struct Struct {
        #[deserr(default = 2, map = square)]
        doggo: usize,
    }

    fn square(n: usize) -> usize {
        n * n
    }

    let data = deserialize::<Struct, _, JsonError>(json!({ "doggo": 1 })).unwrap();

    assert_debug_snapshot!(data, @r###"
    Struct {
        doggo: 1,
    }
    "###);

    let data = deserialize::<Struct, _, JsonError>(json!({})).unwrap();

    assert_debug_snapshot!(data, @r###"
    Struct {
        doggo: 4,
    }
    "###);
}