deserr 0.6.4

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

#[test]
fn option_dont_use_default_by_default() {
    #[allow(unused)]
    #[derive(Debug, Deserr)]
    struct Struct {
        doggo: Option<String>,
    }

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

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

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

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

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

    assert_snapshot!(data, @"Json deserialize error: missing field `doggo` at ``");
}

#[test]
fn default_without_parameter() {
    #[allow(unused)]
    #[derive(Debug, Deserr)]
    struct Struct {
        #[deserr(default)]
        doggo: Option<String>,
    }

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

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

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

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

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

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

#[test]
fn default_with_a_parameter() {
    #[allow(unused)]
    #[derive(Debug, Deserr)]
    struct Struct {
        #[deserr(default = Some(String::from("BORK")))]
        doggo: Option<String>,
    }

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

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

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

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

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

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