use serde::{Deserialize, Serialize};
use std::collections::HashMap;

#[derive(Serialize, Deserialize, PartialEq, Debug)]
pub enum UnitEnum {
    One,
    Two,
    Three,
}

#[derive(Serialize, Deserialize, PartialEq, Debug)]
pub enum UnitEnumNumbered {
    One = 1,
    Two = 2,
    Four = 4,
    Eight = 8,
}

#[derive(Serialize, Deserialize, PartialEq, Debug)]
pub struct TupleStruct(pub i32, pub Vec<u32>);

#[derive(Serialize, Deserialize, PartialEq, Debug)]
pub struct NamedStruct {
    pub zero: Option<u8>,
    pub one: f64,
    pub two: (u8, UnitEnum),
    pub three: String,
}

#[derive(Serialize, Deserialize, PartialEq, Debug)]
pub enum SomeEvent {
    Unit,
    UnnamedSingle(f32),
    UnnamedOptVec(Option<Vec<u8>>),
    UnnamedSingleUnitEnum(Option<Vec<UnitEnum>>),
    UnnamedMultiple(
        u8,
        i8,
        u16,
        i16,
        u32,
        i32,
        u64,
        i64,
        u128,
        i128,
        usize,
        isize,
        bool,
    ),
    Named {
        length: usize,
        interval: f64,
    },
    UnnamedWithStruct(NamedStruct),
    UnnamedHashMap(Option<HashMap<String, Option<UnitEnum>>>),
    NamedStruct {
        inner: NamedStruct,
    },
}
