/// This is the country Code.
/// Working with country codes is much easier than working with country names
/// since some of them have special UTF-8 characters that can cause confusion.
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)]
pub enum CountryIso31661 {
    AF,
    AX,
    AL,
    DZ,
    AS,
    AD,
    AO,
    AI,
    AQ,
    AG,
    AR,
    AM,
    AW,
    AU,
    AT,
    AZ,
    BS,
    BH,
    BD,
    BB,
    BY,
    BE,
    BZ,
    BJ,
    BM,
    BT,
    BO,
    BQ,
    BA,
    BW,
    BV,
    BR,
    IO,
    BN,
    BG,
    BF,
    BI,
    KH,
    CM,
    CA,
    CV,
    KY,
    CF,
    TD,
    CL,
    CN,
    CX,
    CC,
    CO,
    KM,
    CG,
    CD,
    CK,
    CR,
    CI,
    HR,
    CU,
    CW,
    CY,
    CZ,
    DK,
    DJ,
    DM,
    DO,
    EC,
    EG,
    SV,
    GQ,
    ER,
    EE,
    ET,
    FK,
    FO,
    FJ,
    FI,
    FR,
    GF,
    PF,
    TF,
    GA,
    GM,
    GE,
    DE,
    GH,
    GI,
    GR,
    GL,
    GD,
    GP,
    GU,
    GT,
    GG,
    GN,
    GW,
    GY,
    HT,
    HM,
    VA,
    HN,
    HK,
    HU,
    IS,
    IN,
    ID,
    IR,
    IQ,
    IE,
    IM,
    IL,
    IT,
    JM,
    JP,
    JE,
    JO,
    KZ,
    KE,
    KI,
    KP,
    KR,
    KW,
    KG,
    LA,
    LV,
    LB,
    LS,
    LR,
    LY,
    LI,
    LT,
    LU,
    MO,
    MK,
    MG,
    MW,
    MY,
    MV,
    ML,
    MT,
    MH,
    MQ,
    MR,
    MU,
    YT,
    MX,
    FM,
    MD,
    MC,
    MN,
    ME,
    MS,
    MA,
    MZ,
    MM,
    NA,
    NR,
    NP,
    NL,
    NC,
    NZ,
    NI,
    NE,
    NG,
    NU,
    NF,
    MP,
    NO,
    OM,
    PK,
    PW,
    PS,
    PA,
    PG,
    PY,
    PE,
    PH,
    PN,
    PL,
    PT,
    PR,
    QA,
    RE,
    RO,
    RU,
    RW,
    BL,
    SH,
    KN,
    LC,
    MF,
    PM,
    VC,
    WS,
    SM,
    ST,
    SA,
    SN,
    RS,
    SC,
    SL,
    SG,
    SX,
    SK,
    SI,
    SB,
    SO,
    ZA,
    GS,
    SS,
    ES,
    LK,
    SD,
    SR,
    SJ,
    SZ,
    SE,
    CH,
    SY,
    TW,
    TJ,
    TZ,
    TH,
    TL,
    TG,
    TK,
    TO,
    TT,
    TN,
    TR,
    TM,
    TC,
    TV,
    UG,
    UA,
    AE,
    GB,
    US,
    UM,
    UY,
    UZ,
    VU,
    VE,
    VN,
    VG,
    VI,
    WF,
    EH,
    YE,
    ZM,
    ZW,
    UnsupportedIso31661,
}

impl CountryIso31661 {
    #[inline(always)]
    pub const fn country_code(&self) -> &'static str {
        match self {
            Self::AF => "AF",
            Self::AX => "AX",
            Self::AL => "AL",
            Self::DZ => "DZ",
            Self::AS => "AS",
            Self::AD => "AD",
            Self::AO => "AO",
            Self::AI => "AI",
            Self::AQ => "AQ",
            Self::AG => "AG",
            Self::AR => "AR",
            Self::AM => "AM",
            Self::AW => "AW",
            Self::AU => "AU",
            Self::AT => "AT",
            Self::AZ => "AZ",
            Self::BS => "BS",
            Self::BH => "BH",
            Self::BD => "BD",
            Self::BB => "BB",
            Self::BY => "BY",
            Self::BE => "BE",
            Self::BZ => "BZ",
            Self::BJ => "BJ",
            Self::BM => "BM",
            Self::BT => "BT",
            Self::BO => "BO",
            Self::BQ => "BQ",
            Self::BA => "BA",
            Self::BW => "BW",
            Self::BV => "BV",
            Self::BR => "BR",
            Self::IO => "IO",
            Self::BN => "BN",
            Self::BG => "BG",
            Self::BF => "BF",
            Self::BI => "BI",
            Self::KH => "KH",
            Self::CM => "CM",
            Self::CA => "CA",
            Self::CV => "CV",
            Self::KY => "KY",
            Self::CF => "CF",
            Self::TD => "TD",
            Self::CL => "CL",
            Self::CN => "CN",
            Self::CX => "CX",
            Self::CC => "CC",
            Self::CO => "CO",
            Self::KM => "KM",
            Self::CG => "CG",
            Self::CD => "CD",
            Self::CK => "CK",
            Self::CR => "CR",
            Self::CI => "CI",
            Self::HR => "HR",
            Self::CU => "CU",
            Self::CW => "CW",
            Self::CY => "CY",
            Self::CZ => "CZ",
            Self::DK => "DK",
            Self::DJ => "DJ",
            Self::DM => "DM",
            Self::DO => "DO",
            Self::EC => "EC",
            Self::EG => "EG",
            Self::SV => "SV",
            Self::GQ => "GQ",
            Self::ER => "ER",
            Self::EE => "EE",
            Self::ET => "ET",
            Self::FK => "FK",
            Self::FO => "FO",
            Self::FJ => "FJ",
            Self::FI => "FI",
            Self::FR => "FR",
            Self::GF => "GF",
            Self::PF => "PF",
            Self::TF => "TF",
            Self::GA => "GA",
            Self::GM => "GM",
            Self::GE => "GE",
            Self::DE => "DE",
            Self::GH => "GH",
            Self::GI => "GI",
            Self::GR => "GR",
            Self::GL => "GL",
            Self::GD => "GD",
            Self::GP => "GP",
            Self::GU => "GU",
            Self::GT => "GT",
            Self::GG => "GG",
            Self::GN => "GN",
            Self::GW => "GW",
            Self::GY => "GY",
            Self::HT => "HT",
            Self::HM => "HM",
            Self::VA => "VA",
            Self::HN => "HN",
            Self::HK => "HK",
            Self::HU => "HU",
            Self::IS => "IS",
            Self::IN => "IN",
            Self::ID => "ID",
            Self::IR => "IR",
            Self::IQ => "IQ",
            Self::IE => "IE",
            Self::IM => "IM",
            Self::IL => "IL",
            Self::IT => "IT",
            Self::JM => "JM",
            Self::JP => "JP",
            Self::JE => "JE",
            Self::JO => "JO",
            Self::KZ => "KZ",
            Self::KE => "KE",
            Self::KI => "KI",
            Self::KP => "KP",
            Self::KR => "KR",
            Self::KW => "KW",
            Self::KG => "KG",
            Self::LA => "LA",
            Self::LV => "LV",
            Self::LB => "LB",
            Self::LS => "LS",
            Self::LR => "LR",
            Self::LY => "LY",
            Self::LI => "LI",
            Self::LT => "LT",
            Self::LU => "LU",
            Self::MO => "MO",
            Self::MK => "MK",
            Self::MG => "MG",
            Self::MW => "MW",
            Self::MY => "MY",
            Self::MV => "MV",
            Self::ML => "ML",
            Self::MT => "MT",
            Self::MH => "MH",
            Self::MQ => "MQ",
            Self::MR => "MR",
            Self::MU => "MU",
            Self::YT => "YT",
            Self::MX => "MX",
            Self::FM => "FM",
            Self::MD => "MD",
            Self::MC => "MC",
            Self::MN => "MN",
            Self::ME => "ME",
            Self::MS => "MS",
            Self::MA => "MA",
            Self::MZ => "MZ",
            Self::MM => "MM",
            Self::NA => "NA",
            Self::NR => "NR",
            Self::NP => "NP",
            Self::NL => "NL",
            Self::NC => "NC",
            Self::NZ => "NZ",
            Self::NI => "NI",
            Self::NE => "NE",
            Self::NG => "NG",
            Self::NU => "NU",
            Self::NF => "NF",
            Self::MP => "MP",
            Self::NO => "NO",
            Self::OM => "OM",
            Self::PK => "PK",
            Self::PW => "PW",
            Self::PS => "PS",
            Self::PA => "PA",
            Self::PG => "PG",
            Self::PY => "PY",
            Self::PE => "PE",
            Self::PH => "PH",
            Self::PN => "PN",
            Self::PL => "PL",
            Self::PT => "PT",
            Self::PR => "PR",
            Self::QA => "QA",
            Self::RE => "RE",
            Self::RO => "RO",
            Self::RU => "RU",
            Self::RW => "RW",
            Self::BL => "BL",
            Self::SH => "SH",
            Self::KN => "KN",
            Self::LC => "LC",
            Self::MF => "MF",
            Self::PM => "PM",
            Self::VC => "VC",
            Self::WS => "WS",
            Self::SM => "SM",
            Self::ST => "ST",
            Self::SA => "SA",
            Self::SN => "SN",
            Self::RS => "RS",
            Self::SC => "SC",
            Self::SL => "SL",
            Self::SG => "SG",
            Self::SX => "SX",
            Self::SK => "SK",
            Self::SI => "SI",
            Self::SB => "SB",
            Self::SO => "SO",
            Self::ZA => "ZA",
            Self::GS => "GS",
            Self::SS => "SS",
            Self::ES => "ES",
            Self::LK => "LK",
            Self::SD => "SD",
            Self::SR => "SR",
            Self::SJ => "SJ",
            Self::SZ => "SZ",
            Self::SE => "SE",
            Self::CH => "CH",
            Self::SY => "SY",
            Self::TW => "TW",
            Self::TJ => "TJ",
            Self::TZ => "TZ",
            Self::TH => "TH",
            Self::TL => "TL",
            Self::TG => "TG",
            Self::TK => "TK",
            Self::TO => "TO",
            Self::TT => "TT",
            Self::TN => "TN",
            Self::TR => "TR",
            Self::TM => "TM",
            Self::TC => "TC",
            Self::TV => "TV",
            Self::UG => "UG",
            Self::UA => "UA",
            Self::AE => "AE",
            Self::GB => "GB",
            Self::US => "US",
            Self::UM => "UM",
            Self::UY => "UY",
            Self::UZ => "UZ",
            Self::VU => "VU",
            Self::VE => "VE",
            Self::VN => "VN",
            Self::VG => "VG",
            Self::VI => "VI",
            Self::WF => "WF",
            Self::EH => "EH",
            Self::YE => "YE",
            Self::ZM => "ZM",
            Self::ZW => "ZW",
            Self::UnsupportedIso31661 => "Invalid",
        }
    }

    #[inline(always)]
    pub const fn as_str(&self) -> &'static str {
        match self {
            Self::AF => "Afghanistan",
            Self::AX => "Åland Islands",
            Self::AL => "Albania",
            Self::DZ => "Algeria",
            Self::AS => "American Samoa",
            Self::AD => "Andorra",
            Self::AO => "Angola",
            Self::AI => "Anguilla",
            Self::AQ => "Antarctica",
            Self::AG => "Antigua and Barbuda",
            Self::AR => "Argentina",
            Self::AM => "Armenia",
            Self::AW => "Aruba",
            Self::AU => "Australia",
            Self::AT => "Austria",
            Self::AZ => "Azerbaijan",
            Self::BS => "Bahamas",
            Self::BH => "Bahrain",
            Self::BD => "Bangladesh",
            Self::BB => "Barbados",
            Self::BY => "Belarus",
            Self::BE => "Belgium",
            Self::BZ => "Belize",
            Self::BJ => "Benin",
            Self::BM => "Bermuda",
            Self::BT => "Bhutan",
            Self::BO => "Bolivia, Plurinational State of",
            Self::BQ => "Bonaire, Sint Eustatius and Saba",
            Self::BA => "Bosnia and Herzegovina",
            Self::BW => "Botswana",
            Self::BV => "Bouvet Island",
            Self::BR => "Brazil",
            Self::IO => "British Indian Ocean Territory",
            Self::BN => "Brunei Darussalam",
            Self::BG => "Bulgaria",
            Self::BF => "Burkina Faso",
            Self::BI => "Burundi",
            Self::KH => "Cambodia",
            Self::CM => "Cameroon",
            Self::CA => "Canada",
            Self::CV => "Cape Verde",
            Self::KY => "Cayman Islands",
            Self::CF => "Central African Republic",
            Self::TD => "Chad",
            Self::CL => "Chile",
            Self::CN => "China",
            Self::CX => "Christmas Island",
            Self::CC => "Cocos (Keeling) Islands",
            Self::CO => "Colombia",
            Self::KM => "Comoros",
            Self::CG => "Congo",
            Self::CD => "Congo, the Democratic Republic of the",
            Self::CK => "Cook Islands",
            Self::CR => "Costa Rica",
            Self::CI => "Côte d'Ivoire",
            Self::HR => "Croatia",
            Self::CU => "Cuba",
            Self::CW => "Curaçao",
            Self::CY => "Cyprus",
            Self::CZ => "Czech Republic",
            Self::DK => "Denmark",
            Self::DJ => "Djibouti",
            Self::DM => "Dominica",
            Self::DO => "Dominican Republic",
            Self::EC => "Ecuador",
            Self::EG => "Egypt",
            Self::SV => "El Salvador",
            Self::GQ => "Equatorial Guinea",
            Self::ER => "Eritrea",
            Self::EE => "Estonia",
            Self::ET => "Ethiopia",
            Self::FK => "Falkland Islands (Malvinas)",
            Self::FO => "Faroe Islands",
            Self::FJ => "Fiji",
            Self::FI => "Finland",
            Self::FR => "France",
            Self::GF => "French Guiana",
            Self::PF => "French Polynesia",
            Self::TF => "French Southern Territories",
            Self::GA => "Gabon",
            Self::GM => "Gambia",
            Self::GE => "Georgia",
            Self::DE => "Germany",
            Self::GH => "Ghana",
            Self::GI => "Gibraltar",
            Self::GR => "Greece",
            Self::GL => "Greenland",
            Self::GD => "Grenada",
            Self::GP => "Guadeloupe",
            Self::GU => "Guam",
            Self::GT => "Guatemala",
            Self::GG => "Guernsey",
            Self::GN => "Guinea",
            Self::GW => "Guinea-Bissau",
            Self::GY => "Guyana",
            Self::HT => "Haiti",
            Self::HM => "Heard Island and McDonald Islands",
            Self::VA => "Holy See (Vatican City State)",
            Self::HN => "Honduras",
            Self::HK => "Hong Kong",
            Self::HU => "Hungary",
            Self::IS => "Iceland",
            Self::IN => "India",
            Self::ID => "Indonesia",
            Self::IR => "Iran, Islamic Republic of",
            Self::IQ => "Iraq",
            Self::IE => "Ireland",
            Self::IM => "Isle of Man",
            Self::IL => "Israel",
            Self::IT => "Italy",
            Self::JM => "Jamaica",
            Self::JP => "Japan",
            Self::JE => "Jersey",
            Self::JO => "Jordan",
            Self::KZ => "Kazakhstan",
            Self::KE => "Kenya",
            Self::KI => "Kiribati",
            Self::KP => "Korea, Democratic People's Republic of",
            Self::KR => "Korea, Republic of",
            Self::KW => "Kuwait",
            Self::KG => "Kyrgyzstan",
            Self::LA => "Lao People's Democratic Republic",
            Self::LV => "Latvia",
            Self::LB => "Lebanon",
            Self::LS => "Lesotho",
            Self::LR => "Liberia",
            Self::LY => "Libya",
            Self::LI => "Liechtenstein",
            Self::LT => "Lithuania",
            Self::LU => "Luxembourg",
            Self::MO => "Macao",
            Self::MK => "Macedonia, the Former Yugoslav Republic of",
            Self::MG => "Madagascar",
            Self::MW => "Malawi",
            Self::MY => "Malaysia",
            Self::MV => "Maldives",
            Self::ML => "Mali",
            Self::MT => "Malta",
            Self::MH => "Marshall Islands",
            Self::MQ => "Martinique",
            Self::MR => "Mauritania",
            Self::MU => "Mauritius",
            Self::YT => "Mayotte",
            Self::MX => "Mexico",
            Self::FM => "Micronesia, Federated States of",
            Self::MD => "Moldova, Republic of",
            Self::MC => "Monaco",
            Self::MN => "Mongolia",
            Self::ME => "Montenegro",
            Self::MS => "Montserrat",
            Self::MA => "Morocco",
            Self::MZ => "Mozambique",
            Self::MM => "Myanmar",
            Self::NA => "Namibia",
            Self::NR => "Nauru",
            Self::NP => "Nepal",
            Self::NL => "Netherlands",
            Self::NC => "New Caledonia",
            Self::NZ => "New Zealand",
            Self::NI => "Nicaragua",
            Self::NE => "Niger",
            Self::NG => "Nigeria",
            Self::NU => "Niue",
            Self::NF => "Norfolk Island",
            Self::MP => "Northern Mariana Islands",
            Self::NO => "Norway",
            Self::OM => "Oman",
            Self::PK => "Pakistan",
            Self::PW => "Palau",
            Self::PS => "Palestine, State of",
            Self::PA => "Panama",
            Self::PG => "Papua New Guinea",
            Self::PY => "Paraguay",
            Self::PE => "Peru",
            Self::PH => "Philippines",
            Self::PN => "Pitcairn",
            Self::PL => "Poland",
            Self::PT => "Portugal",
            Self::PR => "Puerto Rico",
            Self::QA => "Qatar",
            Self::RE => "Réunion",
            Self::RO => "Romania",
            Self::RU => "Russian Federation",
            Self::RW => "Rwanda",
            Self::BL => "Saint Barthélemy",
            Self::SH => "Saint Helena, Ascension and Tristan da Cunha",
            Self::KN => "Saint Kitts and Nevis",
            Self::LC => "Saint Lucia",
            Self::MF => "Saint Martin (French part)",
            Self::PM => "Saint Pierre and Miquelon",
            Self::VC => "Saint Vincent and the Grenadines",
            Self::WS => "Samoa",
            Self::SM => "San Marino",
            Self::ST => "Sao Tome and Principe",
            Self::SA => "Saudi Arabia",
            Self::SN => "Senegal",
            Self::RS => "Serbia",
            Self::SC => "Seychelles",
            Self::SL => "Sierra Leone",
            Self::SG => "Singapore",
            Self::SX => "Sint Maarten (Dutch part)",
            Self::SK => "Slovakia",
            Self::SI => "Slovenia",
            Self::SB => "Solomon Islands",
            Self::SO => "Somalia",
            Self::ZA => "South Africa",
            Self::GS => "South Georgia and the South Sandwich Islands",
            Self::SS => "South Sudan",
            Self::ES => "Spain",
            Self::LK => "Sri Lanka",
            Self::SD => "Sudan",
            Self::SR => "Suriname",
            Self::SJ => "Svalbard and Jan Mayen",
            Self::SZ => "Swaziland",
            Self::SE => "Sweden",
            Self::CH => "Switzerland",
            Self::SY => "Syrian Arab Republic",
            Self::TW => "Taiwan, Province of China",
            Self::TJ => "Tajikistan",
            Self::TZ => "Tanzania, United Republic of",
            Self::TH => "Thailand",
            Self::TL => "Timor-Leste",
            Self::TG => "Togo",
            Self::TK => "Tokelau",
            Self::TO => "Tonga",
            Self::TT => "Trinidad and Tobago",
            Self::TN => "Tunisia",
            Self::TR => "Turkey",
            Self::TM => "Turkmenistan",
            Self::TC => "Turks and Caicos Islands",
            Self::TV => "Tuvalu",
            Self::UG => "Uganda",
            Self::UA => "Ukraine",
            Self::AE => "United Arab Emirates",
            Self::GB => "United Kingdom",
            Self::US => "United States",
            Self::UM => "United States Minor Outlying Islands",
            Self::UY => "Uruguay",
            Self::UZ => "Uzbekistan",
            Self::VU => "Vanuatu",
            Self::VE => "Venezuela, Bolivarian Republic of",
            Self::VN => "Viet Nam",
            Self::VG => "Virgin Islands, British",
            Self::VI => "Virgin Islands, U.S.",
            Self::WF => "Wallis and Futuna",
            Self::EH => "Western Sahara",
            Self::YE => "Yemen",
            Self::ZM => "Zambia",
            Self::ZW => "Zimbabwe",
            Self::UnsupportedIso31661 => "InvalidCountry",
        }
    }
}

impl From<&str> for CountryIso31661 {
    #[inline(always)]
    fn from(value: &str) -> Self {
        match value {
            "AF" | "Afghanistan" => Self::AF,
            "AX" | "Åland Islands" => Self::AX,
            "AL" | "Albania" => Self::AL,
            "DZ" | "Algeria" => Self::DZ,
            "AS" | "American Samoa" => Self::AS,
            "AD" | "Andorra" => Self::AD,
            "AO" | "Angola" => Self::AO,
            "AI" | "Anguilla" => Self::AI,
            "AQ" | "Antarctica" => Self::AQ,
            "AG" | "Antigua and Barbuda" => Self::AG,
            "AR" | "Argentina" => Self::AR,
            "AM" | "Armenia" => Self::AM,
            "AW" | "Aruba" => Self::AW,
            "AU" | "Australia" => Self::AU,
            "AT" | "Austria" => Self::AT,
            "AZ" | "Azerbaijan" => Self::AZ,
            "BS" | "Bahamas" => Self::BS,
            "BH" | "Bahrain" => Self::BH,
            "BD" | "Bangladesh" => Self::BD,
            "BB" | "Barbados" => Self::BB,
            "BY" | "Belarus" => Self::BY,
            "BE" | "Belgium" => Self::BE,
            "BZ" | "Belize" => Self::BZ,
            "BJ" | "Benin" => Self::BJ,
            "BM" | "Bermuda" => Self::BM,
            "BT" | "Bhutan" => Self::BT,
            "BO" | "Bolivia, Plurinational State of" => Self::BO,
            "BQ" | "Bonaire, Sint Eustatius and Saba" => Self::BQ,
            "BA" | "Bosnia and Herzegovina" => Self::BA,
            "BW" | "Botswana" => Self::BW,
            "BV" | "Bouvet Island" => Self::BV,
            "BR" | "Brazil" => Self::BR,
            "IO" | "British Indian Ocean Territory" => Self::IO,
            "BN" | "Brunei Darussalam" => Self::BN,
            "BG" | "Bulgaria" => Self::BG,
            "BF" | "Burkina Faso" => Self::BF,
            "BI" | "Burundi" => Self::BI,
            "KH" | "Cambodia" => Self::KH,
            "CM" | "Cameroon" => Self::CM,
            "CA" | "Canada" => Self::CA,
            "CV" | "Cape Verde" => Self::CV,
            "KY" | "Cayman Islands" => Self::KY,
            "CF" | "Central African Republic" => Self::CF,
            "TD" | "Chad" => Self::TD,
            "CL" | "Chile" => Self::CL,
            "CN" | "China" => Self::CN,
            "CX" | "Christmas Island" => Self::CX,
            "CC" | "Cocos (Keeling) Islands" => Self::CC,
            "CO" | "Colombia" => Self::CO,
            "KM" | "Comoros" => Self::KM,
            "CG" | "Congo" => Self::CG,
            "CD" | "Congo, the Democratic Republic of the" => Self::CD,
            "CK" | "Cook Islands" => Self::CK,
            "CR" | "Costa Rica" => Self::CR,
            "CI" | "Côte d'Ivoire" => Self::CI,
            "HR" | "Croatia" => Self::HR,
            "CU" | "Cuba" => Self::CU,
            "CW" | "Curaçao" => Self::CW,
            "CY" | "Cyprus" => Self::CY,
            "CZ" | "Czech Republic" => Self::CZ,
            "DK" | "Denmark" => Self::DK,
            "DJ" | "Djibouti" => Self::DJ,
            "DM" | "Dominica" => Self::DM,
            "DO" | "Dominican Republic" => Self::DO,
            "EC" | "Ecuador" => Self::EC,
            "EG" | "Egypt" => Self::EG,
            "SV" | "El Salvador" => Self::SV,
            "GQ" | "Equatorial Guinea" => Self::GQ,
            "ER" | "Eritrea" => Self::ER,
            "EE" | "Estonia" => Self::EE,
            "ET" | "Ethiopia" => Self::ET,
            "FK" | "Falkland Islands (Malvinas)" => Self::FK,
            "FO" | "Faroe Islands" => Self::FO,
            "FJ" | "Fiji" => Self::FJ,
            "FI" | "Finland" => Self::FI,
            "FR" | "France" => Self::FR,
            "GF" | "French Guiana" => Self::GF,
            "PF" | "French Polynesia" => Self::PF,
            "TF" | "French Southern Territories" => Self::TF,
            "GA" | "Gabon" => Self::GA,
            "GM" | "Gambia" => Self::GM,
            "GE" | "Georgia" => Self::GE,
            "DE" | "Germany" => Self::DE,
            "GH" | "Ghana" => Self::GH,
            "GI" | "Gibraltar" => Self::GI,
            "GR" | "Greece" => Self::GR,
            "GL" | "Greenland" => Self::GL,
            "GD" | "Grenada" => Self::GD,
            "GP" | "Guadeloupe" => Self::GP,
            "GU" | "Guam" => Self::GU,
            "GT" | "Guatemala" => Self::GT,
            "GG" | "Guernsey" => Self::GG,
            "GN" | "Guinea" => Self::GN,
            "GW" | "Guinea-Bissau" => Self::GW,
            "GY" | "Guyana" => Self::GY,
            "HT" | "Haiti" => Self::HT,
            "HM" | "Heard Island and McDonald Islands" => Self::HM,
            "VA" | "Holy See (Vatican City State)" => Self::VA,
            "HN" | "Honduras" => Self::HN,
            "HK" | "Hong Kong" => Self::HK,
            "HU" | "Hungary" => Self::HU,
            "IS" | "Iceland" => Self::IS,
            "IN" | "India" => Self::IN,
            "ID" | "Indonesia" => Self::ID,
            "IR" | "Iran, Islamic Republic of" => Self::IR,
            "IQ" | "Iraq" => Self::IQ,
            "IE" | "Ireland" => Self::IE,
            "IM" | "Isle of Man" => Self::IM,
            "IL" | "Israel" => Self::IL,
            "IT" | "Italy" => Self::IT,
            "JM" | "Jamaica" => Self::JM,
            "JP" | "Japan" => Self::JP,
            "JE" | "Jersey" => Self::JE,
            "JO" | "Jordan" => Self::JO,
            "KZ" | "Kazakhstan" => Self::KZ,
            "KE" | "Kenya" => Self::KE,
            "KI" | "Kiribati" => Self::KI,
            "KP" | "Korea, Democratic People's Republic of" => Self::KP,
            "KR" | "Korea, Republic of" => Self::KR,
            "KW" | "Kuwait" => Self::KW,
            "KG" | "Kyrgyzstan" => Self::KG,
            "LA" | "Lao People's Democratic Republic" => Self::LA,
            "LV" | "Latvia" => Self::LV,
            "LB" | "Lebanon" => Self::LB,
            "LS" | "Lesotho" => Self::LS,
            "LR" | "Liberia" => Self::LR,
            "LY" | "Libya" => Self::LY,
            "LI" | "Liechtenstein" => Self::LI,
            "LT" | "Lithuania" => Self::LT,
            "LU" | "Luxembourg" => Self::LU,
            "MO" | "Macao" => Self::MO,
            "MK" | "Macedonia, the Former Yugoslav Republic of" => Self::MK,
            "MG" | "Madagascar" => Self::MG,
            "MW" | "Malawi" => Self::MW,
            "MY" | "Malaysia" => Self::MY,
            "MV" | "Maldives" => Self::MV,
            "ML" | "Mali" => Self::ML,
            "MT" | "Malta" => Self::MT,
            "MH" | "Marshall Islands" => Self::MH,
            "MQ" | "Martinique" => Self::MQ,
            "MR" | "Mauritania" => Self::MR,
            "MU" | "Mauritius" => Self::MU,
            "YT" | "Mayotte" => Self::YT,
            "MX" | "Mexico" => Self::MX,
            "FM" | "Micronesia, Federated States of" => Self::FM,
            "MD" | "Moldova, Republic of" => Self::MD,
            "MC" | "Monaco" => Self::MC,
            "MN" | "Mongolia" => Self::MN,
            "ME" | "Montenegro" => Self::ME,
            "MS" | "Montserrat" => Self::MS,
            "MA" | "Morocco" => Self::MA,
            "MZ" | "Mozambique" => Self::MZ,
            "MM" | "Myanmar" => Self::MM,
            "NA" | "Namibia" => Self::NA,
            "NR" | "Nauru" => Self::NR,
            "NP" | "Nepal" => Self::NP,
            "NL" | "Netherlands" => Self::NL,
            "NC" | "New Caledonia" => Self::NC,
            "NZ" | "New Zealand" => Self::NZ,
            "NI" | "Nicaragua" => Self::NI,
            "NE" | "Niger" => Self::NE,
            "NG" | "Nigeria" => Self::NG,
            "NU" | "Niue" => Self::NU,
            "NF" | "Norfolk Island" => Self::NF,
            "MP" | "Northern Mariana Islands" => Self::MP,
            "NO" | "Norway" => Self::NO,
            "OM" | "Oman" => Self::OM,
            "PK" | "Pakistan" => Self::PK,
            "PW" | "Palau" => Self::PW,
            "PS" | "Palestine, State of" => Self::PS,
            "PA" | "Panama" => Self::PA,
            "PG" | "Papua New Guinea" => Self::PG,
            "PY" | "Paraguay" => Self::PY,
            "PE" | "Peru" => Self::PE,
            "PH" | "Philippines" => Self::PH,
            "PN" | "Pitcairn" => Self::PN,
            "PL" | "Poland" => Self::PL,
            "PT" | "Portugal" => Self::PT,
            "PR" | "Puerto Rico" => Self::PR,
            "QA" | "Qatar" => Self::QA,
            "RE" | "Réunion" => Self::RE,
            "RO" | "Romania" => Self::RO,
            "RU" | "Russian Federation" => Self::RU,
            "RW" | "Rwanda" => Self::RW,
            "BL" | "Saint Barthélemy" => Self::BL,
            "SH" | "Saint Helena, Ascension and Tristan da Cunha" => Self::SH,
            "KN" | "Saint Kitts and Nevis" => Self::KN,
            "LC" | "Saint Lucia" => Self::LC,
            "MF" | "Saint Martin (French part)" => Self::MF,
            "PM" | "Saint Pierre and Miquelon" => Self::PM,
            "VC" | "Saint Vincent and the Grenadines" => Self::VC,
            "WS" | "Samoa" => Self::WS,
            "SM" | "San Marino" => Self::SM,
            "ST" | "Sao Tome and Principe" => Self::ST,
            "SA" | "Saudi Arabia" => Self::SA,
            "SN" | "Senegal" => Self::SN,
            "RS" | "Serbia" => Self::RS,
            "SC" | "Seychelles" => Self::SC,
            "SL" | "Sierra Leone" => Self::SL,
            "SG" | "Singapore" => Self::SG,
            "SX" | "Sint Maarten (Dutch part)" => Self::SX,
            "SK" | "Slovakia" => Self::SK,
            "SI" | "Slovenia" => Self::SI,
            "SB" | "Solomon Islands" => Self::SB,
            "SO" | "Somalia" => Self::SO,
            "ZA" | "South Africa" => Self::ZA,
            "GS" | "South Georgia and the South Sandwich Islands" => Self::GS,
            "SS" | "South Sudan" => Self::SS,
            "ES" | "Spain" => Self::ES,
            "LK" | "Sri Lanka" => Self::LK,
            "SD" | "Sudan" => Self::SD,
            "SR" | "Suriname" => Self::SR,
            "SJ" | "Svalbard and Jan Mayen" => Self::SJ,
            "SZ" | "Swaziland" => Self::SZ,
            "SE" | "Sweden" => Self::SE,
            "CH" | "Switzerland" => Self::CH,
            "SY" | "Syrian Arab Republic" => Self::SY,
            "TW" | "Taiwan, Province of China" => Self::TW,
            "TJ" | "Tajikistan" => Self::TJ,
            "TZ" | "Tanzania, United Republic of" => Self::TZ,
            "TH" | "Thailand" => Self::TH,
            "TL" | "Timor-Leste" => Self::TL,
            "TG" | "Togo" => Self::TG,
            "TK" | "Tokelau" => Self::TK,
            "TO" | "Tonga" => Self::TO,
            "TT" | "Trinidad and Tobago" => Self::TT,
            "TN" | "Tunisia" => Self::TN,
            "TR" | "Turkey" => Self::TR,
            "TM" | "Turkmenistan" => Self::TM,
            "TC" | "Turks and Caicos Islands" => Self::TC,
            "TV" | "Tuvalu" => Self::TV,
            "UG" | "Uganda" => Self::UG,
            "UA" | "Ukraine" => Self::UA,
            "AE" | "United Arab Emirates" => Self::AE,
            "GB" | "United Kingdom" => Self::GB,
            "US" | "United States" => Self::US,
            "UM" | "United States Minor Outlying Islands" => Self::UM,
            "UY" | "Uruguay" => Self::UY,
            "UZ" | "Uzbekistan" => Self::UZ,
            "VU" | "Vanuatu" => Self::VU,
            "VE" | "Venezuela, Bolivarian Republic of" => Self::VE,
            "VN" | "Viet Nam" => Self::VN,
            "VG" | "Virgin Islands, British" => Self::VG,
            "VI" | "Virgin Islands, U.S." => Self::VI,
            "WF" | "Wallis and Futuna" => Self::WF,
            "EH" | "Western Sahara" => Self::EH,
            "YE" | "Yemen" => Self::YE,
            "ZM" | "Zambia" => Self::ZM,
            "ZW" | "Zimbabwe" => Self::ZW,
            _ => Self::UnsupportedIso31661,
        }
    }
}
