#![allow(non_camel_case_types)]
#![allow(non_upper_case_globals)]

use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[repr(i32)]
pub enum EOSType {
    Web = -700,
    IOSUnknown = -600,
    IOS1 = -599,
    IOS2 = -598,
    IOS3 = -597,
    IOS4 = -596,
    IOS5 = -595,
    IOS6 = -594,
    IOS6_1 = -593,
    IOS7 = -592,
    IOS7_1 = -591,
    IOS8 = -590,
    IOS8_1 = -589,
    IOS8_2 = -588,
    IOS8_3 = -587,
    IOS8_4 = -586,
    IOS9 = -585,
    IOS9_1 = -584,
    IOS9_2 = -583,
    IOS9_3 = -582,
    IOS10 = -581,
    IOS10_1 = -580,
    IOS10_2 = -579,
    IOS10_3 = -578,
    IOS11 = -577,
    IOS11_1 = -576,
    IOS11_2 = -575,
    IOS11_3 = -574,
    IOS11_4 = -573,
    IOS12 = -572,
    IOS12_1 = -571,
    AndroidUnknown = -500,
    Android6 = -499,
    Android7 = -498,
    Android8 = -497,
    Android9 = -496,
    UMQ = -400,
    PS3 = -300,
    LinuxUnknown = -203,
    Linux22 = -202,
    Linux24 = -201,
    Linux26 = -200,
    Linux32 = -199,
    Linux35 = -198,
    Linux36 = -197,
    Linux310 = -196,
    Linux316 = -195,
    Linux318 = -194,
    Linux3x = -193,
    Linux4x = -192,
    Linux41 = -191,
    Linux44 = -190,
    Linux49 = -189,
    Linux414 = -188,
    Linux419 = -187,
    Linux5x = -186,
    Linux54 = -185,
    Linux6x = -184,
    Linux7x = -183,
    Linux510 = -182,
    MacOSUnknown = -102,
    LinuxMax = -101,
    MacOS105 = -100,
    MacOS1058 = -99,
    MacOS106 = -95,
    MacOS1063 = -94,
    MacOS1064_slgu = -93,
    MacOS1067 = -92,
    MacOS107 = -90,
    MacOS108 = -89,
    MacOS109 = -88,
    MacOS1010 = -87,
    MacOS1011 = -86,
    MacOS1012 = -85,
    Macos1013 = -84,
    Macos1014 = -83,
    Macos1015 = -82,
    MacOS1016 = -81,
    MacOS11 = -80,
    MacOS111 = -79,
    MacOS1017 = -78,
    MacOS12 = -77,
    MacOS1018 = -76,
    MacOS13 = -75,
    MacOS1019 = -74,
    MacOS14 = -73,
    MacOS1020 = -72,
    MacOS15 = -71,
    MacOSMax = -1,
    WinUnknown = 0,
    Win311 = 1,
    Win95 = 2,
    Win98 = 3,
    WinME = 4,
    WinNT = 5,
    Win2000 = 6,
    WinXP = 7,
    Win2003 = 8,
    WinVista = 9,
    Windows7 = 10,
    Win2008 = 11,
    Win2012 = 12,
    Windows8 = 13,
    Windows81 = 14,
    Win2012R2 = 15,
    Windows10 = 16,
    Win2016 = 17,
    Win2019 = 18,
    Win2022 = 19,
    Win11 = 20,
    WinMAX = 21,
}

impl EOSType {
    pub fn from_i32(val: i32) -> Option<Self> {
        match val {
            x if x == Self::Web as i32 => Some(Self::Web),
            x if x == Self::IOSUnknown as i32 => Some(Self::IOSUnknown),
            x if x == Self::IOS1 as i32 => Some(Self::IOS1),
            x if x == Self::IOS2 as i32 => Some(Self::IOS2),
            x if x == Self::IOS3 as i32 => Some(Self::IOS3),
            x if x == Self::IOS4 as i32 => Some(Self::IOS4),
            x if x == Self::IOS5 as i32 => Some(Self::IOS5),
            x if x == Self::IOS6 as i32 => Some(Self::IOS6),
            x if x == Self::IOS6_1 as i32 => Some(Self::IOS6_1),
            x if x == Self::IOS7 as i32 => Some(Self::IOS7),
            x if x == Self::IOS7_1 as i32 => Some(Self::IOS7_1),
            x if x == Self::IOS8 as i32 => Some(Self::IOS8),
            x if x == Self::IOS8_1 as i32 => Some(Self::IOS8_1),
            x if x == Self::IOS8_2 as i32 => Some(Self::IOS8_2),
            x if x == Self::IOS8_3 as i32 => Some(Self::IOS8_3),
            x if x == Self::IOS8_4 as i32 => Some(Self::IOS8_4),
            x if x == Self::IOS9 as i32 => Some(Self::IOS9),
            x if x == Self::IOS9_1 as i32 => Some(Self::IOS9_1),
            x if x == Self::IOS9_2 as i32 => Some(Self::IOS9_2),
            x if x == Self::IOS9_3 as i32 => Some(Self::IOS9_3),
            x if x == Self::IOS10 as i32 => Some(Self::IOS10),
            x if x == Self::IOS10_1 as i32 => Some(Self::IOS10_1),
            x if x == Self::IOS10_2 as i32 => Some(Self::IOS10_2),
            x if x == Self::IOS10_3 as i32 => Some(Self::IOS10_3),
            x if x == Self::IOS11 as i32 => Some(Self::IOS11),
            x if x == Self::IOS11_1 as i32 => Some(Self::IOS11_1),
            x if x == Self::IOS11_2 as i32 => Some(Self::IOS11_2),
            x if x == Self::IOS11_3 as i32 => Some(Self::IOS11_3),
            x if x == Self::IOS11_4 as i32 => Some(Self::IOS11_4),
            x if x == Self::IOS12 as i32 => Some(Self::IOS12),
            x if x == Self::IOS12_1 as i32 => Some(Self::IOS12_1),
            x if x == Self::AndroidUnknown as i32 => Some(Self::AndroidUnknown),
            x if x == Self::Android6 as i32 => Some(Self::Android6),
            x if x == Self::Android7 as i32 => Some(Self::Android7),
            x if x == Self::Android8 as i32 => Some(Self::Android8),
            x if x == Self::Android9 as i32 => Some(Self::Android9),
            x if x == Self::UMQ as i32 => Some(Self::UMQ),
            x if x == Self::PS3 as i32 => Some(Self::PS3),
            x if x == Self::LinuxUnknown as i32 => Some(Self::LinuxUnknown),
            x if x == Self::Linux22 as i32 => Some(Self::Linux22),
            x if x == Self::Linux24 as i32 => Some(Self::Linux24),
            x if x == Self::Linux26 as i32 => Some(Self::Linux26),
            x if x == Self::Linux32 as i32 => Some(Self::Linux32),
            x if x == Self::Linux35 as i32 => Some(Self::Linux35),
            x if x == Self::Linux36 as i32 => Some(Self::Linux36),
            x if x == Self::Linux310 as i32 => Some(Self::Linux310),
            x if x == Self::Linux316 as i32 => Some(Self::Linux316),
            x if x == Self::Linux318 as i32 => Some(Self::Linux318),
            x if x == Self::Linux3x as i32 => Some(Self::Linux3x),
            x if x == Self::Linux4x as i32 => Some(Self::Linux4x),
            x if x == Self::Linux41 as i32 => Some(Self::Linux41),
            x if x == Self::Linux44 as i32 => Some(Self::Linux44),
            x if x == Self::Linux49 as i32 => Some(Self::Linux49),
            x if x == Self::Linux414 as i32 => Some(Self::Linux414),
            x if x == Self::Linux419 as i32 => Some(Self::Linux419),
            x if x == Self::Linux5x as i32 => Some(Self::Linux5x),
            x if x == Self::Linux54 as i32 => Some(Self::Linux54),
            x if x == Self::Linux6x as i32 => Some(Self::Linux6x),
            x if x == Self::Linux7x as i32 => Some(Self::Linux7x),
            x if x == Self::Linux510 as i32 => Some(Self::Linux510),
            x if x == Self::MacOSUnknown as i32 => Some(Self::MacOSUnknown),
            x if x == Self::LinuxMax as i32 => Some(Self::LinuxMax),
            x if x == Self::MacOS105 as i32 => Some(Self::MacOS105),
            x if x == Self::MacOS1058 as i32 => Some(Self::MacOS1058),
            x if x == Self::MacOS106 as i32 => Some(Self::MacOS106),
            x if x == Self::MacOS1063 as i32 => Some(Self::MacOS1063),
            x if x == Self::MacOS1064_slgu as i32 => Some(Self::MacOS1064_slgu),
            x if x == Self::MacOS1067 as i32 => Some(Self::MacOS1067),
            x if x == Self::MacOS107 as i32 => Some(Self::MacOS107),
            x if x == Self::MacOS108 as i32 => Some(Self::MacOS108),
            x if x == Self::MacOS109 as i32 => Some(Self::MacOS109),
            x if x == Self::MacOS1010 as i32 => Some(Self::MacOS1010),
            x if x == Self::MacOS1011 as i32 => Some(Self::MacOS1011),
            x if x == Self::MacOS1012 as i32 => Some(Self::MacOS1012),
            x if x == Self::Macos1013 as i32 => Some(Self::Macos1013),
            x if x == Self::Macos1014 as i32 => Some(Self::Macos1014),
            x if x == Self::Macos1015 as i32 => Some(Self::Macos1015),
            x if x == Self::MacOS1016 as i32 => Some(Self::MacOS1016),
            x if x == Self::MacOS11 as i32 => Some(Self::MacOS11),
            x if x == Self::MacOS111 as i32 => Some(Self::MacOS111),
            x if x == Self::MacOS1017 as i32 => Some(Self::MacOS1017),
            x if x == Self::MacOS12 as i32 => Some(Self::MacOS12),
            x if x == Self::MacOS1018 as i32 => Some(Self::MacOS1018),
            x if x == Self::MacOS13 as i32 => Some(Self::MacOS13),
            x if x == Self::MacOS1019 as i32 => Some(Self::MacOS1019),
            x if x == Self::MacOS14 as i32 => Some(Self::MacOS14),
            x if x == Self::MacOS1020 as i32 => Some(Self::MacOS1020),
            x if x == Self::MacOS15 as i32 => Some(Self::MacOS15),
            x if x == Self::MacOSMax as i32 => Some(Self::MacOSMax),
            x if x == Self::WinUnknown as i32 => Some(Self::WinUnknown),
            x if x == Self::Win311 as i32 => Some(Self::Win311),
            x if x == Self::Win95 as i32 => Some(Self::Win95),
            x if x == Self::Win98 as i32 => Some(Self::Win98),
            x if x == Self::WinME as i32 => Some(Self::WinME),
            x if x == Self::WinNT as i32 => Some(Self::WinNT),
            x if x == Self::Win2000 as i32 => Some(Self::Win2000),
            x if x == Self::WinXP as i32 => Some(Self::WinXP),
            x if x == Self::Win2003 as i32 => Some(Self::Win2003),
            x if x == Self::WinVista as i32 => Some(Self::WinVista),
            x if x == Self::Windows7 as i32 => Some(Self::Windows7),
            x if x == Self::Win2008 as i32 => Some(Self::Win2008),
            x if x == Self::Win2012 as i32 => Some(Self::Win2012),
            x if x == Self::Windows8 as i32 => Some(Self::Windows8),
            x if x == Self::Windows81 as i32 => Some(Self::Windows81),
            x if x == Self::Win2012R2 as i32 => Some(Self::Win2012R2),
            x if x == Self::Windows10 as i32 => Some(Self::Windows10),
            x if x == Self::Win2016 as i32 => Some(Self::Win2016),
            x if x == Self::Win2019 as i32 => Some(Self::Win2019),
            x if x == Self::Win2022 as i32 => Some(Self::Win2022),
            x if x == Self::Win11 as i32 => Some(Self::Win11),
            x if x == Self::WinMAX as i32 => Some(Self::WinMAX),
            _ => None,
        }
    }
}
