use serde_derive::{Deserialize, Serialize};
use serde_test::{assert_tokens, Token};

#[derive(Serialize, Deserialize, Debug, PartialEq)]
enum Enum {
    Simple {
        a: i32,
    },
    Flatten {
        #[serde(flatten)]
        flatten: (),
        a: i32,
    },
}

#[test]
fn simple_variant() {
    assert_tokens(
        &Enum::Simple { a: 42 },
        &[
            Token::StructVariant {
                name: "Enum",
                variant: "Simple",
                len: 1,
            },
            Token::Str("a"),
            Token::I32(42),
            Token::StructVariantEnd,
        ],
    );
}

#[test]
fn flatten_variant() {
    assert_tokens(
        &Enum::Flatten { flatten: (), a: 42 },
        &[
            Token::NewtypeVariant {
                name: "Enum",
                variant: "Flatten",
            },
            Token::Map { len: None },
            Token::Str("a"),
            Token::I32(42),
            Token::MapEnd,
        ],
    );
}