miniserde-enum 0.1.3

Derive macros for miniserde on enums
Documentation
use miniserde::{json, Deserialize};
use miniserde_enum::Deserialize_enum;

#[test]
fn test_external() {
    #[derive(Deserialize_enum, Debug, PartialEq)]
    enum External {
        A(i32),
        #[serde(rename = "renamedB")]
        B(i32, String),
        C {
            x: i32,
        },
        D,
    }
    use External::*;
    let example = r#"[{"A":21},{"renamedB":[42,"everything"]},{"C":{"x":2}},"D"]"#;
    let actual: Vec<External> = json::from_str(example).unwrap();
    let expected = [A(21), B(42, "everything".to_string()), C { x: 2 }, D];
    assert_eq!(actual, expected);
}

#[test]
fn test_adjacent() {
    #[derive(Deserialize_enum, Debug, PartialEq)]
    #[serde(tag = "type", content = "content")]
    enum Adjacent {
        A(i32),
        #[serde(rename = "renamedB")]
        B(i32, String),
        C {
            x: i32,
        },
        D,
    }
    use Adjacent::*;
    let example = r#"[{"type":"A","content":21},{"type":"renamedB","content":[42,"everything"]},{"type":"C","content":{"x":2}},{"type":"D"}]"#;
    let actual: Vec<Adjacent> = json::from_str(example).unwrap();
    let expected = [A(21), B(42, "everything".to_string()), C { x: 2 }, D];
    assert_eq!(actual, expected);
}

#[test]
fn test_internal() {
    #[derive(Deserialize_enum, Debug, PartialEq)]
    #[serde(tag = "type")]
    enum Internal {
        #[serde(rename = "renamedB")]
        B,
        C {
            x: i32,
        },
        D,
    }
    use Internal::*;
    let example = r#"[{"type":"renamedB"},{"type":"C","x":2},{"type":"D"}]"#;
    let actual: Vec<Internal> = json::from_str(example).unwrap();
    let expected = [B, C { x: 2 }, D];
    assert_eq!(actual, expected);
}