use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, PartialEq, Debug)]
enum Enum {
    Unit,
    Newtype(usize),
    Tuple(usize, String),
    Struct { value: usize },
}

#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct Struct {
    w: Enum,
    x: Enum,
    y: Enum,
    z: Enum,
}

#[test]
fn singleton_map_roundtrip() {
    let object = Struct {
        w: Enum::Unit,
        x: Enum::Newtype(1),
        y: Enum::Tuple(1, "a".to_string()),
        z: Enum::Struct { value: 1 },
    };

    let yaml = serde_saphyr::to_string(&object).unwrap();
    let deserialized: Struct = serde_saphyr::from_str(&yaml).unwrap();
    assert_eq!(object, deserialized);
}
