// This file is auto-generated by codegen.py
// Do not edit manually - changes will be overwritten

use core::fmt;

/// Durable Objects location hint.
///
/// These are the supported regions for Durable Objects location hints.
/// Note: Location hints are best-effort and not guaranteed.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum LocationHint {
    /// Africa
    Afr,
    /// Asia-Pacific
    Apac,
    /// Eastern Europe
    EEur,
    /// Eastern North America
    ENam,
    /// Middle East
    Me,
    /// Oceania
    Oc,
    /// South America
    Sam,
    /// Western Europe
    WEur,
    /// Western North America
    WNam,
}

impl LocationHint {
    /// Returns the location hint code as used in the Cloudflare API.
    #[inline]
    pub const fn as_str(&self) -> &'static str {
        match self {
            Self::Afr => "afr",
            Self::Apac => "apac",
            Self::EEur => "eeur",
            Self::ENam => "enam",
            Self::Me => "me",
            Self::Oc => "oc",
            Self::Sam => "sam",
            Self::WEur => "weur",
            Self::WNam => "wnam",
        }
    }

    /// Returns the human-readable name of the location.
    #[inline]
    pub const fn name(&self) -> &'static str {
        match self {
            Self::Afr => "Africa",
            Self::Apac => "Asia-Pacific",
            Self::EEur => "Eastern Europe",
            Self::ENam => "Eastern North America",
            Self::Me => "Middle East",
            Self::Oc => "Oceania",
            Self::Sam => "South America",
            Self::WEur => "Western Europe",
            Self::WNam => "Western North America",
        }
    }

    /// Returns all location hints.
    pub const ALL: &'static [LocationHint] = &[
        Self::Afr,
        Self::Apac,
        Self::EEur,
        Self::ENam,
        Self::Me,
        Self::Oc,
        Self::Sam,
        Self::WEur,
        Self::WNam,
    ];

    /// Parse a location hint from its string code.
    pub fn parse(s: &str) -> Option<Self> {
        match s {
            "afr" => Some(Self::Afr),
            "apac" => Some(Self::Apac),
            "eeur" => Some(Self::EEur),
            "enam" => Some(Self::ENam),
            "me" => Some(Self::Me),
            "oc" => Some(Self::Oc),
            "sam" => Some(Self::Sam),
            "weur" => Some(Self::WEur),
            "wnam" => Some(Self::WNam),
            _ => None,
        }
    }
}

impl fmt::Display for LocationHint {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.write_str(self.as_str())
    }
}

/// Cloudflare data center (colo) identifier.
///
/// Each variant represents a Cloudflare edge location.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum Colo {
    /// Annaba, Algeria
    AAE,
    /// Abidjan, Ivory Coast
    ABJ,
    /// Albuquerque, United States
    ABQ,
    /// Accra, Ghana
    ACC,
    /// Izmir, Turkey
    ADB,
    /// Addis Ababa, Ethiopia
    ADD,
    /// Adelaide, SA, Australia
    ADL,
    /// Agra, India
    AGR,
    /// Auckland, New Zealand
    AKL,
    /// Aktobe, Kazakhstan
    AKX,
    /// Almaty, Kazakhstan
    ALA,
    /// Algiers, Algeria
    ALG,
    /// Ahmedabad, India
    AMD,
    /// Amman, Jordan
    AMM,
    /// Amsterdam, Netherlands
    AMS,
    /// Anchorage, United States
    ANC,
    /// Arica, Chile
    ARI,
    /// Stockholm, Sweden
    ARN,
    /// Aracatuba, Brazil
    ARU,
    /// Yamoussoukro, Ivory Coast
    ASK,
    /// Asunción, Paraguay
    ASU,
    /// Athens, Greece
    ATH,
    /// Atlanta, GA, United States
    ATL,
    /// Austin, United States
    AUS,
    /// Manama, Bahrain
    BAH,
    /// Barranquilla, Colombia
    BAQ,
    /// Barcelona, Spain
    BCN,
    /// Belgrade, Serbia
    BEG,
    /// Belém, Brazil
    BEL,
    /// Beirut, Lebanon
    BEY,
    /// Bridgetown, Barbados
    BGI,
    /// Bangor, United States
    BGR,
    /// Baghdad, Iraq
    BGW,
    /// Beihai, China
    BHY,
    /// Bangkok, Thailand
    BKK,
    /// Bangalore, India
    BLR,
    /// Nashville, United States
    BNA,
    /// Brisbane, QLD, Australia
    BNE,
    /// Blumenau, Brazil
    BNU,
    /// Bordeaux, France
    BOD,
    /// Bogota, Colombia
    BOG,
    /// Mumbai, India
    BOM,
    /// Boston, MA, United States
    BOS,
    /// Brussels, Belgium
    BRU,
    /// Brasilia, Brazil
    BSB,
    /// Basra, Iraq
    BSR,
    /// Bratislava, Slovakia
    BTS,
    /// Budapest, Hungary
    BUD,
    /// Buffalo, NY, United States
    BUF,
    /// Bandar Seri Begawan, Brunei
    BWN,
    /// Cairo, Egypt
    CAI,
    /// Guangzhou, China
    CAN,
    /// Campos dos Goytacazes, Brazil
    CAW,
    /// Canberra, ACT, Australia
    CBR,
    /// Concepción, Chile
    CCP,
    /// Kolkata, India
    CCU,
    /// Paris, France
    CDG,
    /// Cebu, Philippines
    CEB,
    /// Cacador, Brazil
    CFC,
    /// Cuiaba, Brazil
    CGB,
    /// Changde, China
    CGD,
    /// Jakarta, Indonesia
    CGK,
    /// Zhengzhou, China
    CGO,
    /// Chittagong, Bangladesh
    CGP,
    /// Cagayan de Oro, Philippines
    CGY,
    /// Christchurch, New Zealand
    CHC,
    /// Coimbatore, India
    CJB,
    /// Chongqing, China
    CKG,
    /// Cleveland, United States
    CLE,
    /// Cali, Colombia
    CLO,
    /// Charlotte, NC, United States
    CLT,
    /// Colombo, Sri Lanka
    CMB,
    /// Columbus, OH, United States
    CMH,
    /// Belo Horizonte, Brazil
    CNF,
    /// Cloud Network Interconnect (CNI)
    CNI,
    /// Kannur, India
    CNN,
    /// Chiang Mai, Thailand
    CNX,
    /// Kochi, India
    COK,
    /// Córdoba, Argentina
    COR,
    /// Copenhagen, Denmark
    CPH,
    /// Cape Town, South Africa
    CPT,
    /// Tarlac City, Philippines
    CRK,
    /// Changsha, China
    CSX,
    /// Chengdu, China
    CTU,
    /// Curitiba, Brazil
    CWB,
    /// Constantine, Algeria
    CZL,
    /// Changzhou, China
    CZX,
    /// Dhaka, Bangladesh
    DAC,
    /// Da Nang, Vietnam
    DAD,
    /// Dar es Salaam, Tanzania
    DAR,
    /// New Delhi, India
    DEL,
    /// Denver, CO, United States
    DEN,
    /// Digital Experience Monitoring (DEX)
    DEX,
    /// Dallas, TX, United States
    DFW,
    /// Dakar, Senegal
    DKR,
    /// Dalian, China
    DLC,
    /// Data Loss Prevention (DLP)
    DLP,
    /// Moscow, Russia
    DME,
    /// Dammam, Saudi Arabia
    DMM,
    /// Doha, Qatar
    DOH,
    /// Denpasar, Indonesia
    DPS,
    /// Detroit, MI, United States
    DTW,
    /// Dublin, Ireland
    DUB,
    /// Durban, South Africa
    DUR,
    /// Düsseldorf, Germany
    DUS,
    /// Dubai, United Arab Emirates
    DXB,
    /// Kampala, Uganda
    EBB,
    /// Erbil, Iraq
    EBL,
    /// Yerevan, Armenia
    EVN,
    /// Newark, NJ, United States
    EWR,
    /// Buenos Aires, Argentina
    EZE,
    /// Rome, Italy
    FCO,
    /// Kinshasa, DR Congo
    FIH,
    /// Florianopolis, Brazil
    FLN,
    /// Fuzhou, China
    FOC,
    /// Fortaleza, Brazil
    FOR,
    /// Frankfurt, Germany
    FRA,
    /// Bishkek, Kyrgyzstan
    FRU,
    /// Sioux Falls, SD, United States
    FSD,
    /// Fukuoka, Japan
    FUK,
    /// Foshan, China
    FUO,
    /// Gaborone, Botswana
    GBE,
    /// Guadalajara, Mexico
    GDL,
    /// Georgetown, Guyana
    GEO,
    /// Rio de Janeiro, Brazil
    GIG,
    /// St. George's, Grenada
    GND,
    /// Gothenburg, Sweden
    GOT,
    /// São Paulo, Brazil
    GRU,
    /// Guatemala City, Guatemala
    GUA,
    /// Hagatna, Guam
    GUM,
    /// Geneva, Switzerland
    GVA,
    /// Baku, Azerbaijan
    GYD,
    /// Guayaquil, Ecuador
    GYE,
    /// Goiania, Brazil
    GYN,
    /// Chengmai, China
    HAK,
    /// Hamburg, Germany
    HAM,
    /// Hanoi, Vietnam
    HAN,
    /// Hobart, Australia
    HBA,
    /// Helsinki, Finland
    HEL,
    /// Haifa, Israel
    HFA,
    /// Shaoxing, China
    HGH,
    /// Hong Kong
    HKG,
    /// Honolulu, HI, United States
    HNL,
    /// Harare, Zimbabwe
    HRE,
    /// Hyderabad, India
    HYD,
    /// Taizhou, China
    HYN,
    /// Ashburn, VA, United States
    IAD,
    /// Houston, TX, United States
    IAH,
    /// Seoul, South Korea
    ICN,
    /// Indianapolis, IN, United States
    IND,
    /// Islamabad, Pakistan
    ISB,
    /// Istanbul, Turkey
    IST,
    /// Sulaymaniyah, Iraq
    ISU,
    /// Chandigarh, India
    IXC,
    /// Jacksonville, FL, United States
    JAX,
    /// Juazeiro do Norte, Brazil
    JDO,
    /// Jeddah, Saudi Arabia
    JED,
    /// Johor Bahru, Malaysia - (JHB)
    JHB,
    /// Djibouti, Djibouti
    JIB,
    /// Johannesburg, South Africa
    JNB,
    /// Yogyakarta, Indonesia
    JOG,
    /// Joinville, Brazil
    JOI,
    /// Jiaxing, China
    JXG,
    /// Kyiv, Ukraine
    KBP,
    /// Kuching, Malaysia
    KCH,
    /// Reykjavík, Iceland
    KEF,
    /// Kigali, Rwanda
    KGL,
    /// Kaohsiung City, Taiwan
    KHH,
    /// Karachi, Pakistan
    KHI,
    /// Nanchang, China
    KHN,
    /// Kingston, Jamaica
    KIN,
    /// Chișinău, Moldova
    KIV,
    /// Osaka, Japan
    KIX,
    /// Krasnoyarsk, Russia
    KJA,
    /// Kunming, China
    KMG,
    /// Kanpur, India
    KNU,
    /// Kathmandu, Nepal
    KTM,
    /// Kuala Lumpur, Malaysia
    KUL,
    /// Guiyang, China
    KWE,
    /// Kuwait City, Kuwait
    KWI,
    /// Luanda, Angola
    LAD,
    /// Las Vegas, NV, United States
    LAS,
    /// Los Angeles, CA, United States
    LAX,
    /// Nicosia, Cyprus
    LCA,
    /// Saint Petersburg, Russia
    LED,
    /// Lahore, Pakistan
    LHE,
    /// London, United Kingdom
    LHR,
    /// Lima, Peru
    LIM,
    /// Lisbon, Portugal
    LIS,
    /// Astara, Azerbaijan
    LLK,
    /// Lilongwe, Malawi
    LLW,
    /// Lagos, Nigeria
    LOS,
    /// La Paz, Bolivia
    LPB,
    /// Lusaka, Zambia
    LUN,
    /// Luxembourg City, Luxembourg
    LUX,
    /// Lyon, France
    LYS,
    /// Chennai, India
    MAA,
    /// Madrid, Spain
    MAD,
    /// Manchester, United Kingdom
    MAN,
    /// Manaus, Brazil
    MAO,
    /// Mombasa, Kenya
    MBA,
    /// Kansas City, MO, United States
    MCI,
    /// Muscat, Oman
    MCT,
    /// Medellín, Colombia
    MDE,
    /// Melbourne, VIC, Australia
    MEL,
    /// Memphis, TN, United States
    MEM,
    /// Mexico City, Mexico
    MEX,
    /// Macau
    MFM,
    /// Miami, FL, United States
    MIA,
    /// Santa Venera, Malta
    MLA,
    /// Male, Maldives
    MLE,
    /// Malang, Indonesia
    MLG,
    /// Manila, Philippines
    MNL,
    /// Maputo, Mozambique
    MPM,
    /// Marseille, France
    MRS,
    /// Port Louis, Mauritius
    MRU,
    /// Minneapolis, MN, United States
    MSP,
    /// Minsk, Belarus
    MSQ,
    /// Munich, Germany
    MUC,
    /// Milan, Italy
    MXP,
    /// Nagpur, India
    NAG,
    /// Nairobi, Kenya
    NBO,
    /// Najaf, Iraq
    NJF,
    /// Nanning, China
    NNG,
    /// Noumea, New Caledonia
    NOU,
    /// Neuquen, Argentina
    NQN,
    /// Astana, Kazakhstan
    NQZ,
    /// Tokyo, Japan
    NRT,
    /// Timbo, Brazil
    NVT,
    /// Naha, Japan
    OKA,
    /// Oklahoma City, United States
    OKC,
    /// Omaha, NE, United States
    OMA,
    /// Chicago, IL, United States
    ORD,
    /// Norfolk, VA, United States
    ORF,
    /// Oran, Algeria
    ORN,
    /// Oslo, Norway
    OSL,
    /// Bucharest, Romania
    OTP,
    /// Ouagadougou, Burkina Faso
    OUA,
    /// Patna, India
    PAT,
    /// Thimphu, Bhutan
    PBH,
    /// Paramaribo, Suriname
    PBM,
    /// Portland, OR, United States
    PDX,
    /// Perth, WA, Australia
    PER,
    /// Philadelphia, United States
    PHL,
    /// Phoenix, AZ, United States
    PHX,
    /// Pittsburgh, PA, United States
    PIT,
    /// Langfang, China
    PKX,
    /// Palermo, Italy
    PMO,
    /// Palmas, Brazil
    PMW,
    /// Phnom Penh, Cambodia
    PNH,
    /// Porto Alegre, Brazil
    POA,
    /// Port of Spain, Trinidad and Tobago
    POS,
    /// Tahiti, French Polynesia
    PPT,
    /// Prague, Czech Republic
    PRG,
    /// Panama City, Panama
    PTY,
    /// Queretaro, MX, Mexico
    QRO,
    /// Americana, Brazil
    QWJ,
    /// Ribeirao Preto, Brazil
    RAO,
    /// Durham, United States
    RDU,
    /// Recife, Brazil
    REC,
    /// Richmond, VA, United States
    RIC,
    /// Riga, Latvia
    RIX,
    /// Riyadh, Saudi Arabia
    RUH,
    /// Saint-Denis, Réunion
    RUN,
    /// San Diego, CA, United States
    SAN,
    /// San Pedro Sula, Honduras
    SAP,
    /// San Antonio, United States
    SAT,
    /// Santiago, Chile
    SCL,
    /// Santo Domingo, Dominican Republic
    SDQ,
    /// Seattle, WA, United States
    SEA,
    /// San Francisco, United States
    SFO,
    /// Ho Chi Minh City, Vietnam
    SGN,
    /// Shanghai, China
    SHA,
    /// Singapore, Singapore
    SIN,
    /// San Jose, CA, United States
    SJC,
    /// São José dos Campos, Brazil
    SJK,
    /// San José, Costa Rica
    SJO,
    /// São José do Rio Preto, Brazil
    SJP,
    /// San Juan, Puerto Rico
    SJU,
    /// Shijiazhuang, China
    SJW,
    /// Thessaloniki, Greece
    SKG,
    /// Skopje, North Macedonia
    SKP,
    /// Salt Lake City, UT, United States
    SLC,
    /// Sacramento, CA, United States
    SMF,
    /// Sorocaba, Brazil
    SOD,
    /// Sofia, Bulgaria
    SOF,
    /// Salvador, Brazil
    SSA,
    /// Santiago de los Caballeros, Dominican Republic
    STI,
    /// St. Louis, MO, United States
    STL,
    /// Stuttgart, Germany
    STR,
    /// Suva, Fiji
    SUV,
    /// Sydney, NSW, Australia
    SYD,
    /// Shenzhen, China
    SZX,
    /// Qingdao, China
    TAO,
    /// Tbilisi, Georgia
    TBS,
    /// Tongren, China
    TEN,
    /// Tegucigalpa, Honduras
    TGU,
    /// Tirana, Albania
    TIA,
    /// Tallahassee, FL, United States
    TLH,
    /// Tallinn, Estonia
    TLL,
    /// Tel Aviv, Israel
    TLV,
    /// Zibo, China
    TNA,
    /// Antananarivo, Madagascar
    TNR,
    /// Tampa, United States
    TPA,
    /// Taipei
    TPE,
    /// Tunis, Tunisia
    TUN,
    /// Berlin, Germany
    TXL,
    /// Yangquan, China
    TYN,
    /// Uberlandia, Brazil
    UDI,
    /// Quito, Ecuador
    UIO,
    /// Ulaanbaatar, Mongolia
    ULN,
    /// Surat Thani, Thailand
    URT,
    /// Campinas, Brazil
    VCP,
    /// Vienna, Austria
    VIE,
    /// Vitoria, Brazil
    VIX,
    /// Vilnius, Lithuania
    VNO,
    /// Vientiane, Laos
    VTE,
    /// Warsaw, Poland
    WAW,
    /// Windhoek, Namibia
    WDH,
    /// Wroclaw, Poland
    WRO,
    /// Chapeco, Brazil
    XAP,
    /// Xiangyang, China
    XFN,
    /// Baoji, China
    XIY,
    /// Nasiriyah, Iraq
    XNH,
    /// Xining, China
    XNN,
    /// Halifax, Canada
    YHZ,
    /// Ottawa, Canada
    YOW,
    /// Montréal, QC, Canada
    YUL,
    /// Vancouver, BC, Canada
    YVR,
    /// Winnipeg, MB, Canada
    YWG,
    /// Saskatoon, SK, Canada
    YXE,
    /// Calgary, AB, Canada
    YYC,
    /// Toronto, ON, Canada
    YYZ,
    /// Zagreb, Croatia
    ZAG,
    /// Ramallah
    ZDM,
    /// Zurich, Switzerland
    ZRH,
}

impl Colo {
    /// Returns the 3-letter IATA code for this colo.
    #[inline]
    pub const fn code(&self) -> &'static str {
        match self {
            Self::AAE => "AAE",
            Self::ABJ => "ABJ",
            Self::ABQ => "ABQ",
            Self::ACC => "ACC",
            Self::ADB => "ADB",
            Self::ADD => "ADD",
            Self::ADL => "ADL",
            Self::AGR => "AGR",
            Self::AKL => "AKL",
            Self::AKX => "AKX",
            Self::ALA => "ALA",
            Self::ALG => "ALG",
            Self::AMD => "AMD",
            Self::AMM => "AMM",
            Self::AMS => "AMS",
            Self::ANC => "ANC",
            Self::ARI => "ARI",
            Self::ARN => "ARN",
            Self::ARU => "ARU",
            Self::ASK => "ASK",
            Self::ASU => "ASU",
            Self::ATH => "ATH",
            Self::ATL => "ATL",
            Self::AUS => "AUS",
            Self::BAH => "BAH",
            Self::BAQ => "BAQ",
            Self::BCN => "BCN",
            Self::BEG => "BEG",
            Self::BEL => "BEL",
            Self::BEY => "BEY",
            Self::BGI => "BGI",
            Self::BGR => "BGR",
            Self::BGW => "BGW",
            Self::BHY => "BHY",
            Self::BKK => "BKK",
            Self::BLR => "BLR",
            Self::BNA => "BNA",
            Self::BNE => "BNE",
            Self::BNU => "BNU",
            Self::BOD => "BOD",
            Self::BOG => "BOG",
            Self::BOM => "BOM",
            Self::BOS => "BOS",
            Self::BRU => "BRU",
            Self::BSB => "BSB",
            Self::BSR => "BSR",
            Self::BTS => "BTS",
            Self::BUD => "BUD",
            Self::BUF => "BUF",
            Self::BWN => "BWN",
            Self::CAI => "CAI",
            Self::CAN => "CAN",
            Self::CAW => "CAW",
            Self::CBR => "CBR",
            Self::CCP => "CCP",
            Self::CCU => "CCU",
            Self::CDG => "CDG",
            Self::CEB => "CEB",
            Self::CFC => "CFC",
            Self::CGB => "CGB",
            Self::CGD => "CGD",
            Self::CGK => "CGK",
            Self::CGO => "CGO",
            Self::CGP => "CGP",
            Self::CGY => "CGY",
            Self::CHC => "CHC",
            Self::CJB => "CJB",
            Self::CKG => "CKG",
            Self::CLE => "CLE",
            Self::CLO => "CLO",
            Self::CLT => "CLT",
            Self::CMB => "CMB",
            Self::CMH => "CMH",
            Self::CNF => "CNF",
            Self::CNI => "CNI",
            Self::CNN => "CNN",
            Self::CNX => "CNX",
            Self::COK => "COK",
            Self::COR => "COR",
            Self::CPH => "CPH",
            Self::CPT => "CPT",
            Self::CRK => "CRK",
            Self::CSX => "CSX",
            Self::CTU => "CTU",
            Self::CWB => "CWB",
            Self::CZL => "CZL",
            Self::CZX => "CZX",
            Self::DAC => "DAC",
            Self::DAD => "DAD",
            Self::DAR => "DAR",
            Self::DEL => "DEL",
            Self::DEN => "DEN",
            Self::DEX => "DEX",
            Self::DFW => "DFW",
            Self::DKR => "DKR",
            Self::DLC => "DLC",
            Self::DLP => "DLP",
            Self::DME => "DME",
            Self::DMM => "DMM",
            Self::DOH => "DOH",
            Self::DPS => "DPS",
            Self::DTW => "DTW",
            Self::DUB => "DUB",
            Self::DUR => "DUR",
            Self::DUS => "DUS",
            Self::DXB => "DXB",
            Self::EBB => "EBB",
            Self::EBL => "EBL",
            Self::EVN => "EVN",
            Self::EWR => "EWR",
            Self::EZE => "EZE",
            Self::FCO => "FCO",
            Self::FIH => "FIH",
            Self::FLN => "FLN",
            Self::FOC => "FOC",
            Self::FOR => "FOR",
            Self::FRA => "FRA",
            Self::FRU => "FRU",
            Self::FSD => "FSD",
            Self::FUK => "FUK",
            Self::FUO => "FUO",
            Self::GBE => "GBE",
            Self::GDL => "GDL",
            Self::GEO => "GEO",
            Self::GIG => "GIG",
            Self::GND => "GND",
            Self::GOT => "GOT",
            Self::GRU => "GRU",
            Self::GUA => "GUA",
            Self::GUM => "GUM",
            Self::GVA => "GVA",
            Self::GYD => "GYD",
            Self::GYE => "GYE",
            Self::GYN => "GYN",
            Self::HAK => "HAK",
            Self::HAM => "HAM",
            Self::HAN => "HAN",
            Self::HBA => "HBA",
            Self::HEL => "HEL",
            Self::HFA => "HFA",
            Self::HGH => "HGH",
            Self::HKG => "HKG",
            Self::HNL => "HNL",
            Self::HRE => "HRE",
            Self::HYD => "HYD",
            Self::HYN => "HYN",
            Self::IAD => "IAD",
            Self::IAH => "IAH",
            Self::ICN => "ICN",
            Self::IND => "IND",
            Self::ISB => "ISB",
            Self::IST => "IST",
            Self::ISU => "ISU",
            Self::IXC => "IXC",
            Self::JAX => "JAX",
            Self::JDO => "JDO",
            Self::JED => "JED",
            Self::JHB => "JHB",
            Self::JIB => "JIB",
            Self::JNB => "JNB",
            Self::JOG => "JOG",
            Self::JOI => "JOI",
            Self::JXG => "JXG",
            Self::KBP => "KBP",
            Self::KCH => "KCH",
            Self::KEF => "KEF",
            Self::KGL => "KGL",
            Self::KHH => "KHH",
            Self::KHI => "KHI",
            Self::KHN => "KHN",
            Self::KIN => "KIN",
            Self::KIV => "KIV",
            Self::KIX => "KIX",
            Self::KJA => "KJA",
            Self::KMG => "KMG",
            Self::KNU => "KNU",
            Self::KTM => "KTM",
            Self::KUL => "KUL",
            Self::KWE => "KWE",
            Self::KWI => "KWI",
            Self::LAD => "LAD",
            Self::LAS => "LAS",
            Self::LAX => "LAX",
            Self::LCA => "LCA",
            Self::LED => "LED",
            Self::LHE => "LHE",
            Self::LHR => "LHR",
            Self::LIM => "LIM",
            Self::LIS => "LIS",
            Self::LLK => "LLK",
            Self::LLW => "LLW",
            Self::LOS => "LOS",
            Self::LPB => "LPB",
            Self::LUN => "LUN",
            Self::LUX => "LUX",
            Self::LYS => "LYS",
            Self::MAA => "MAA",
            Self::MAD => "MAD",
            Self::MAN => "MAN",
            Self::MAO => "MAO",
            Self::MBA => "MBA",
            Self::MCI => "MCI",
            Self::MCT => "MCT",
            Self::MDE => "MDE",
            Self::MEL => "MEL",
            Self::MEM => "MEM",
            Self::MEX => "MEX",
            Self::MFM => "MFM",
            Self::MIA => "MIA",
            Self::MLA => "MLA",
            Self::MLE => "MLE",
            Self::MLG => "MLG",
            Self::MNL => "MNL",
            Self::MPM => "MPM",
            Self::MRS => "MRS",
            Self::MRU => "MRU",
            Self::MSP => "MSP",
            Self::MSQ => "MSQ",
            Self::MUC => "MUC",
            Self::MXP => "MXP",
            Self::NAG => "NAG",
            Self::NBO => "NBO",
            Self::NJF => "NJF",
            Self::NNG => "NNG",
            Self::NOU => "NOU",
            Self::NQN => "NQN",
            Self::NQZ => "NQZ",
            Self::NRT => "NRT",
            Self::NVT => "NVT",
            Self::OKA => "OKA",
            Self::OKC => "OKC",
            Self::OMA => "OMA",
            Self::ORD => "ORD",
            Self::ORF => "ORF",
            Self::ORN => "ORN",
            Self::OSL => "OSL",
            Self::OTP => "OTP",
            Self::OUA => "OUA",
            Self::PAT => "PAT",
            Self::PBH => "PBH",
            Self::PBM => "PBM",
            Self::PDX => "PDX",
            Self::PER => "PER",
            Self::PHL => "PHL",
            Self::PHX => "PHX",
            Self::PIT => "PIT",
            Self::PKX => "PKX",
            Self::PMO => "PMO",
            Self::PMW => "PMW",
            Self::PNH => "PNH",
            Self::POA => "POA",
            Self::POS => "POS",
            Self::PPT => "PPT",
            Self::PRG => "PRG",
            Self::PTY => "PTY",
            Self::QRO => "QRO",
            Self::QWJ => "QWJ",
            Self::RAO => "RAO",
            Self::RDU => "RDU",
            Self::REC => "REC",
            Self::RIC => "RIC",
            Self::RIX => "RIX",
            Self::RUH => "RUH",
            Self::RUN => "RUN",
            Self::SAN => "SAN",
            Self::SAP => "SAP",
            Self::SAT => "SAT",
            Self::SCL => "SCL",
            Self::SDQ => "SDQ",
            Self::SEA => "SEA",
            Self::SFO => "SFO",
            Self::SGN => "SGN",
            Self::SHA => "SHA",
            Self::SIN => "SIN",
            Self::SJC => "SJC",
            Self::SJK => "SJK",
            Self::SJO => "SJO",
            Self::SJP => "SJP",
            Self::SJU => "SJU",
            Self::SJW => "SJW",
            Self::SKG => "SKG",
            Self::SKP => "SKP",
            Self::SLC => "SLC",
            Self::SMF => "SMF",
            Self::SOD => "SOD",
            Self::SOF => "SOF",
            Self::SSA => "SSA",
            Self::STI => "STI",
            Self::STL => "STL",
            Self::STR => "STR",
            Self::SUV => "SUV",
            Self::SYD => "SYD",
            Self::SZX => "SZX",
            Self::TAO => "TAO",
            Self::TBS => "TBS",
            Self::TEN => "TEN",
            Self::TGU => "TGU",
            Self::TIA => "TIA",
            Self::TLH => "TLH",
            Self::TLL => "TLL",
            Self::TLV => "TLV",
            Self::TNA => "TNA",
            Self::TNR => "TNR",
            Self::TPA => "TPA",
            Self::TPE => "TPE",
            Self::TUN => "TUN",
            Self::TXL => "TXL",
            Self::TYN => "TYN",
            Self::UDI => "UDI",
            Self::UIO => "UIO",
            Self::ULN => "ULN",
            Self::URT => "URT",
            Self::VCP => "VCP",
            Self::VIE => "VIE",
            Self::VIX => "VIX",
            Self::VNO => "VNO",
            Self::VTE => "VTE",
            Self::WAW => "WAW",
            Self::WDH => "WDH",
            Self::WRO => "WRO",
            Self::XAP => "XAP",
            Self::XFN => "XFN",
            Self::XIY => "XIY",
            Self::XNH => "XNH",
            Self::XNN => "XNN",
            Self::YHZ => "YHZ",
            Self::YOW => "YOW",
            Self::YUL => "YUL",
            Self::YVR => "YVR",
            Self::YWG => "YWG",
            Self::YXE => "YXE",
            Self::YYC => "YYC",
            Self::YYZ => "YYZ",
            Self::ZAG => "ZAG",
            Self::ZDM => "ZDM",
            Self::ZRH => "ZRH",
        }
    }

    /// Returns the human-readable name of this colo.
    #[inline]
    pub const fn name(&self) -> &'static str {
        match self {
            Self::AAE => "Annaba, Algeria",
            Self::ABJ => "Abidjan, Ivory Coast",
            Self::ABQ => "Albuquerque, United States",
            Self::ACC => "Accra, Ghana",
            Self::ADB => "Izmir, Turkey",
            Self::ADD => "Addis Ababa, Ethiopia",
            Self::ADL => "Adelaide, SA, Australia",
            Self::AGR => "Agra, India",
            Self::AKL => "Auckland, New Zealand",
            Self::AKX => "Aktobe, Kazakhstan",
            Self::ALA => "Almaty, Kazakhstan",
            Self::ALG => "Algiers, Algeria",
            Self::AMD => "Ahmedabad, India",
            Self::AMM => "Amman, Jordan",
            Self::AMS => "Amsterdam, Netherlands",
            Self::ANC => "Anchorage, United States",
            Self::ARI => "Arica, Chile",
            Self::ARN => "Stockholm, Sweden",
            Self::ARU => "Aracatuba, Brazil",
            Self::ASK => "Yamoussoukro, Ivory Coast",
            Self::ASU => "Asunción, Paraguay",
            Self::ATH => "Athens, Greece",
            Self::ATL => "Atlanta, GA, United States",
            Self::AUS => "Austin, United States",
            Self::BAH => "Manama, Bahrain",
            Self::BAQ => "Barranquilla, Colombia",
            Self::BCN => "Barcelona, Spain",
            Self::BEG => "Belgrade, Serbia",
            Self::BEL => "Belém, Brazil",
            Self::BEY => "Beirut, Lebanon",
            Self::BGI => "Bridgetown, Barbados",
            Self::BGR => "Bangor, United States",
            Self::BGW => "Baghdad, Iraq",
            Self::BHY => "Beihai, China",
            Self::BKK => "Bangkok, Thailand",
            Self::BLR => "Bangalore, India",
            Self::BNA => "Nashville, United States",
            Self::BNE => "Brisbane, QLD, Australia",
            Self::BNU => "Blumenau, Brazil",
            Self::BOD => "Bordeaux, France",
            Self::BOG => "Bogota, Colombia",
            Self::BOM => "Mumbai, India",
            Self::BOS => "Boston, MA, United States",
            Self::BRU => "Brussels, Belgium",
            Self::BSB => "Brasilia, Brazil",
            Self::BSR => "Basra, Iraq",
            Self::BTS => "Bratislava, Slovakia",
            Self::BUD => "Budapest, Hungary",
            Self::BUF => "Buffalo, NY, United States",
            Self::BWN => "Bandar Seri Begawan, Brunei",
            Self::CAI => "Cairo, Egypt",
            Self::CAN => "Guangzhou, China",
            Self::CAW => "Campos dos Goytacazes, Brazil",
            Self::CBR => "Canberra, ACT, Australia",
            Self::CCP => "Concepción, Chile",
            Self::CCU => "Kolkata, India",
            Self::CDG => "Paris, France",
            Self::CEB => "Cebu, Philippines",
            Self::CFC => "Cacador, Brazil",
            Self::CGB => "Cuiaba, Brazil",
            Self::CGD => "Changde, China",
            Self::CGK => "Jakarta, Indonesia",
            Self::CGO => "Zhengzhou, China",
            Self::CGP => "Chittagong, Bangladesh",
            Self::CGY => "Cagayan de Oro, Philippines",
            Self::CHC => "Christchurch, New Zealand",
            Self::CJB => "Coimbatore, India",
            Self::CKG => "Chongqing, China",
            Self::CLE => "Cleveland, United States",
            Self::CLO => "Cali, Colombia",
            Self::CLT => "Charlotte, NC, United States",
            Self::CMB => "Colombo, Sri Lanka",
            Self::CMH => "Columbus, OH, United States",
            Self::CNF => "Belo Horizonte, Brazil",
            Self::CNI => "Cloud Network Interconnect (CNI)",
            Self::CNN => "Kannur, India",
            Self::CNX => "Chiang Mai, Thailand",
            Self::COK => "Kochi, India",
            Self::COR => "Córdoba, Argentina",
            Self::CPH => "Copenhagen, Denmark",
            Self::CPT => "Cape Town, South Africa",
            Self::CRK => "Tarlac City, Philippines",
            Self::CSX => "Changsha, China",
            Self::CTU => "Chengdu, China",
            Self::CWB => "Curitiba, Brazil",
            Self::CZL => "Constantine, Algeria",
            Self::CZX => "Changzhou, China",
            Self::DAC => "Dhaka, Bangladesh",
            Self::DAD => "Da Nang, Vietnam",
            Self::DAR => "Dar es Salaam, Tanzania",
            Self::DEL => "New Delhi, India",
            Self::DEN => "Denver, CO, United States",
            Self::DEX => "Digital Experience Monitoring (DEX)",
            Self::DFW => "Dallas, TX, United States",
            Self::DKR => "Dakar, Senegal",
            Self::DLC => "Dalian, China",
            Self::DLP => "Data Loss Prevention (DLP)",
            Self::DME => "Moscow, Russia",
            Self::DMM => "Dammam, Saudi Arabia",
            Self::DOH => "Doha, Qatar",
            Self::DPS => "Denpasar, Indonesia",
            Self::DTW => "Detroit, MI, United States",
            Self::DUB => "Dublin, Ireland",
            Self::DUR => "Durban, South Africa",
            Self::DUS => "Düsseldorf, Germany",
            Self::DXB => "Dubai, United Arab Emirates",
            Self::EBB => "Kampala, Uganda",
            Self::EBL => "Erbil, Iraq",
            Self::EVN => "Yerevan, Armenia",
            Self::EWR => "Newark, NJ, United States",
            Self::EZE => "Buenos Aires, Argentina",
            Self::FCO => "Rome, Italy",
            Self::FIH => "Kinshasa, DR Congo",
            Self::FLN => "Florianopolis, Brazil",
            Self::FOC => "Fuzhou, China",
            Self::FOR => "Fortaleza, Brazil",
            Self::FRA => "Frankfurt, Germany",
            Self::FRU => "Bishkek, Kyrgyzstan",
            Self::FSD => "Sioux Falls, SD, United States",
            Self::FUK => "Fukuoka, Japan",
            Self::FUO => "Foshan, China",
            Self::GBE => "Gaborone, Botswana",
            Self::GDL => "Guadalajara, Mexico",
            Self::GEO => "Georgetown, Guyana",
            Self::GIG => "Rio de Janeiro, Brazil",
            Self::GND => "St. George's, Grenada",
            Self::GOT => "Gothenburg, Sweden",
            Self::GRU => "São Paulo, Brazil",
            Self::GUA => "Guatemala City, Guatemala",
            Self::GUM => "Hagatna, Guam",
            Self::GVA => "Geneva, Switzerland",
            Self::GYD => "Baku, Azerbaijan",
            Self::GYE => "Guayaquil, Ecuador",
            Self::GYN => "Goiania, Brazil",
            Self::HAK => "Chengmai, China",
            Self::HAM => "Hamburg, Germany",
            Self::HAN => "Hanoi, Vietnam",
            Self::HBA => "Hobart, Australia",
            Self::HEL => "Helsinki, Finland",
            Self::HFA => "Haifa, Israel",
            Self::HGH => "Shaoxing, China",
            Self::HKG => "Hong Kong",
            Self::HNL => "Honolulu, HI, United States",
            Self::HRE => "Harare, Zimbabwe",
            Self::HYD => "Hyderabad, India",
            Self::HYN => "Taizhou, China",
            Self::IAD => "Ashburn, VA, United States",
            Self::IAH => "Houston, TX, United States",
            Self::ICN => "Seoul, South Korea",
            Self::IND => "Indianapolis, IN, United States",
            Self::ISB => "Islamabad, Pakistan",
            Self::IST => "Istanbul, Turkey",
            Self::ISU => "Sulaymaniyah, Iraq",
            Self::IXC => "Chandigarh, India",
            Self::JAX => "Jacksonville, FL, United States",
            Self::JDO => "Juazeiro do Norte, Brazil",
            Self::JED => "Jeddah, Saudi Arabia",
            Self::JHB => "Johor Bahru, Malaysia - (JHB)",
            Self::JIB => "Djibouti, Djibouti",
            Self::JNB => "Johannesburg, South Africa",
            Self::JOG => "Yogyakarta, Indonesia",
            Self::JOI => "Joinville, Brazil",
            Self::JXG => "Jiaxing, China",
            Self::KBP => "Kyiv, Ukraine",
            Self::KCH => "Kuching, Malaysia",
            Self::KEF => "Reykjavík, Iceland",
            Self::KGL => "Kigali, Rwanda",
            Self::KHH => "Kaohsiung City, Taiwan",
            Self::KHI => "Karachi, Pakistan",
            Self::KHN => "Nanchang, China",
            Self::KIN => "Kingston, Jamaica",
            Self::KIV => "Chișinău, Moldova",
            Self::KIX => "Osaka, Japan",
            Self::KJA => "Krasnoyarsk, Russia",
            Self::KMG => "Kunming, China",
            Self::KNU => "Kanpur, India",
            Self::KTM => "Kathmandu, Nepal",
            Self::KUL => "Kuala Lumpur, Malaysia",
            Self::KWE => "Guiyang, China",
            Self::KWI => "Kuwait City, Kuwait",
            Self::LAD => "Luanda, Angola",
            Self::LAS => "Las Vegas, NV, United States",
            Self::LAX => "Los Angeles, CA, United States",
            Self::LCA => "Nicosia, Cyprus",
            Self::LED => "Saint Petersburg, Russia",
            Self::LHE => "Lahore, Pakistan",
            Self::LHR => "London, United Kingdom",
            Self::LIM => "Lima, Peru",
            Self::LIS => "Lisbon, Portugal",
            Self::LLK => "Astara, Azerbaijan",
            Self::LLW => "Lilongwe, Malawi",
            Self::LOS => "Lagos, Nigeria",
            Self::LPB => "La Paz, Bolivia",
            Self::LUN => "Lusaka, Zambia",
            Self::LUX => "Luxembourg City, Luxembourg",
            Self::LYS => "Lyon, France",
            Self::MAA => "Chennai, India",
            Self::MAD => "Madrid, Spain",
            Self::MAN => "Manchester, United Kingdom",
            Self::MAO => "Manaus, Brazil",
            Self::MBA => "Mombasa, Kenya",
            Self::MCI => "Kansas City, MO, United States",
            Self::MCT => "Muscat, Oman",
            Self::MDE => "Medellín, Colombia",
            Self::MEL => "Melbourne, VIC, Australia",
            Self::MEM => "Memphis, TN, United States",
            Self::MEX => "Mexico City, Mexico",
            Self::MFM => "Macau",
            Self::MIA => "Miami, FL, United States",
            Self::MLA => "Santa Venera, Malta",
            Self::MLE => "Male, Maldives",
            Self::MLG => "Malang, Indonesia",
            Self::MNL => "Manila, Philippines",
            Self::MPM => "Maputo, Mozambique",
            Self::MRS => "Marseille, France",
            Self::MRU => "Port Louis, Mauritius",
            Self::MSP => "Minneapolis, MN, United States",
            Self::MSQ => "Minsk, Belarus",
            Self::MUC => "Munich, Germany",
            Self::MXP => "Milan, Italy",
            Self::NAG => "Nagpur, India",
            Self::NBO => "Nairobi, Kenya",
            Self::NJF => "Najaf, Iraq",
            Self::NNG => "Nanning, China",
            Self::NOU => "Noumea, New Caledonia",
            Self::NQN => "Neuquen, Argentina",
            Self::NQZ => "Astana, Kazakhstan",
            Self::NRT => "Tokyo, Japan",
            Self::NVT => "Timbo, Brazil",
            Self::OKA => "Naha, Japan",
            Self::OKC => "Oklahoma City, United States",
            Self::OMA => "Omaha, NE, United States",
            Self::ORD => "Chicago, IL, United States",
            Self::ORF => "Norfolk, VA, United States",
            Self::ORN => "Oran, Algeria",
            Self::OSL => "Oslo, Norway",
            Self::OTP => "Bucharest, Romania",
            Self::OUA => "Ouagadougou, Burkina Faso",
            Self::PAT => "Patna, India",
            Self::PBH => "Thimphu, Bhutan",
            Self::PBM => "Paramaribo, Suriname",
            Self::PDX => "Portland, OR, United States",
            Self::PER => "Perth, WA, Australia",
            Self::PHL => "Philadelphia, United States",
            Self::PHX => "Phoenix, AZ, United States",
            Self::PIT => "Pittsburgh, PA, United States",
            Self::PKX => "Langfang, China",
            Self::PMO => "Palermo, Italy",
            Self::PMW => "Palmas, Brazil",
            Self::PNH => "Phnom Penh, Cambodia",
            Self::POA => "Porto Alegre, Brazil",
            Self::POS => "Port of Spain, Trinidad and Tobago",
            Self::PPT => "Tahiti, French Polynesia",
            Self::PRG => "Prague, Czech Republic",
            Self::PTY => "Panama City, Panama",
            Self::QRO => "Queretaro, MX, Mexico",
            Self::QWJ => "Americana, Brazil",
            Self::RAO => "Ribeirao Preto, Brazil",
            Self::RDU => "Durham, United States",
            Self::REC => "Recife, Brazil",
            Self::RIC => "Richmond, VA, United States",
            Self::RIX => "Riga, Latvia",
            Self::RUH => "Riyadh, Saudi Arabia",
            Self::RUN => "Saint-Denis, Réunion",
            Self::SAN => "San Diego, CA, United States",
            Self::SAP => "San Pedro Sula, Honduras",
            Self::SAT => "San Antonio, United States",
            Self::SCL => "Santiago, Chile",
            Self::SDQ => "Santo Domingo, Dominican Republic",
            Self::SEA => "Seattle, WA, United States",
            Self::SFO => "San Francisco, United States",
            Self::SGN => "Ho Chi Minh City, Vietnam",
            Self::SHA => "Shanghai, China",
            Self::SIN => "Singapore, Singapore",
            Self::SJC => "San Jose, CA, United States",
            Self::SJK => "São José dos Campos, Brazil",
            Self::SJO => "San José, Costa Rica",
            Self::SJP => "São José do Rio Preto, Brazil",
            Self::SJU => "San Juan, Puerto Rico",
            Self::SJW => "Shijiazhuang, China",
            Self::SKG => "Thessaloniki, Greece",
            Self::SKP => "Skopje, North Macedonia",
            Self::SLC => "Salt Lake City, UT, United States",
            Self::SMF => "Sacramento, CA, United States",
            Self::SOD => "Sorocaba, Brazil",
            Self::SOF => "Sofia, Bulgaria",
            Self::SSA => "Salvador, Brazil",
            Self::STI => "Santiago de los Caballeros, Dominican Republic",
            Self::STL => "St. Louis, MO, United States",
            Self::STR => "Stuttgart, Germany",
            Self::SUV => "Suva, Fiji",
            Self::SYD => "Sydney, NSW, Australia",
            Self::SZX => "Shenzhen, China",
            Self::TAO => "Qingdao, China",
            Self::TBS => "Tbilisi, Georgia",
            Self::TEN => "Tongren, China",
            Self::TGU => "Tegucigalpa, Honduras",
            Self::TIA => "Tirana, Albania",
            Self::TLH => "Tallahassee, FL, United States",
            Self::TLL => "Tallinn, Estonia",
            Self::TLV => "Tel Aviv, Israel",
            Self::TNA => "Zibo, China",
            Self::TNR => "Antananarivo, Madagascar",
            Self::TPA => "Tampa, United States",
            Self::TPE => "Taipei",
            Self::TUN => "Tunis, Tunisia",
            Self::TXL => "Berlin, Germany",
            Self::TYN => "Yangquan, China",
            Self::UDI => "Uberlandia, Brazil",
            Self::UIO => "Quito, Ecuador",
            Self::ULN => "Ulaanbaatar, Mongolia",
            Self::URT => "Surat Thani, Thailand",
            Self::VCP => "Campinas, Brazil",
            Self::VIE => "Vienna, Austria",
            Self::VIX => "Vitoria, Brazil",
            Self::VNO => "Vilnius, Lithuania",
            Self::VTE => "Vientiane, Laos",
            Self::WAW => "Warsaw, Poland",
            Self::WDH => "Windhoek, Namibia",
            Self::WRO => "Wroclaw, Poland",
            Self::XAP => "Chapeco, Brazil",
            Self::XFN => "Xiangyang, China",
            Self::XIY => "Baoji, China",
            Self::XNH => "Nasiriyah, Iraq",
            Self::XNN => "Xining, China",
            Self::YHZ => "Halifax, Canada",
            Self::YOW => "Ottawa, Canada",
            Self::YUL => "Montréal, QC, Canada",
            Self::YVR => "Vancouver, BC, Canada",
            Self::YWG => "Winnipeg, MB, Canada",
            Self::YXE => "Saskatoon, SK, Canada",
            Self::YYC => "Calgary, AB, Canada",
            Self::YYZ => "Toronto, ON, Canada",
            Self::ZAG => "Zagreb, Croatia",
            Self::ZDM => "Ramallah",
            Self::ZRH => "Zurich, Switzerland",
        }
    }

    /// Returns the nearest Durable Objects location hint for this colo.
    ///
    /// This is based on measured latency data and represents the best
    /// location hint to use when creating Durable Objects for requests
    /// arriving at this colo.
    ///
    /// Returns `None` if no mapping data is available for this colo.
    #[inline]
    pub const fn location_hint(&self) -> Option<LocationHint> {
        match self {
            Self::AAE => Some(LocationHint::Me),
            Self::ABJ => None,
            Self::ABQ => Some(LocationHint::WNam),
            Self::ACC => Some(LocationHint::Afr),
            Self::ADB => Some(LocationHint::EEur),
            Self::ADD => None,
            Self::ADL => Some(LocationHint::Oc),
            Self::AGR => None,
            Self::AKL => Some(LocationHint::Oc),
            Self::AKX => Some(LocationHint::EEur),
            Self::ALA => Some(LocationHint::EEur),
            Self::ALG => Some(LocationHint::Afr),
            Self::AMD => Some(LocationHint::Apac),
            Self::AMM => Some(LocationHint::Afr),
            Self::AMS => Some(LocationHint::Afr),
            Self::ANC => None,
            Self::ARI => None,
            Self::ARN => Some(LocationHint::EEur),
            Self::ARU => None,
            Self::ASK => Some(LocationHint::WEur),
            Self::ASU => Some(LocationHint::ENam),
            Self::ATH => Some(LocationHint::EEur),
            Self::ATL => Some(LocationHint::ENam),
            Self::AUS => Some(LocationHint::WNam),
            Self::BAH => Some(LocationHint::WEur),
            Self::BAQ => Some(LocationHint::ENam),
            Self::BCN => None,
            Self::BEG => Some(LocationHint::Me),
            Self::BEL => Some(LocationHint::Sam),
            Self::BEY => Some(LocationHint::EEur),
            Self::BGI => Some(LocationHint::Sam),
            Self::BGR => Some(LocationHint::ENam),
            Self::BGW => Some(LocationHint::EEur),
            Self::BHY => None,
            Self::BKK => Some(LocationHint::Apac),
            Self::BLR => Some(LocationHint::Apac),
            Self::BNA => Some(LocationHint::Sam),
            Self::BNE => Some(LocationHint::Oc),
            Self::BNU => Some(LocationHint::ENam),
            Self::BOD => None,
            Self::BOG => Some(LocationHint::Sam),
            Self::BOM => Some(LocationHint::Apac),
            Self::BOS => Some(LocationHint::Sam),
            Self::BRU => Some(LocationHint::Afr),
            Self::BSB => Some(LocationHint::Sam),
            Self::BSR => Some(LocationHint::Me),
            Self::BTS => Some(LocationHint::EEur),
            Self::BUD => Some(LocationHint::Me),
            Self::BUF => Some(LocationHint::Sam),
            Self::BWN => None,
            Self::CAI => Some(LocationHint::WEur),
            Self::CAN => None,
            Self::CAW => None,
            Self::CBR => Some(LocationHint::Oc),
            Self::CCP => Some(LocationHint::ENam),
            Self::CCU => Some(LocationHint::Oc),
            Self::CDG => Some(LocationHint::Afr),
            Self::CEB => Some(LocationHint::Apac),
            Self::CFC => Some(LocationHint::Sam),
            Self::CGB => Some(LocationHint::ENam),
            Self::CGD => None,
            Self::CGK => Some(LocationHint::Apac),
            Self::CGO => None,
            Self::CGP => Some(LocationHint::Apac),
            Self::CGY => Some(LocationHint::Apac),
            Self::CHC => Some(LocationHint::Oc),
            Self::CJB => None,
            Self::CKG => None,
            Self::CLE => Some(LocationHint::Sam),
            Self::CLO => Some(LocationHint::ENam),
            Self::CLT => Some(LocationHint::ENam),
            Self::CMB => Some(LocationHint::Oc),
            Self::CMH => Some(LocationHint::Sam),
            Self::CNF => Some(LocationHint::Sam),
            Self::CNI => None,
            Self::CNN => Some(LocationHint::Apac),
            Self::CNX => Some(LocationHint::Apac),
            Self::COK => None,
            Self::COR => Some(LocationHint::Sam),
            Self::CPH => Some(LocationHint::WEur),
            Self::CPT => Some(LocationHint::Afr),
            Self::CRK => Some(LocationHint::Apac),
            Self::CSX => None,
            Self::CTU => None,
            Self::CWB => Some(LocationHint::Sam),
            Self::CZL => Some(LocationHint::WEur),
            Self::CZX => None,
            Self::DAC => Some(LocationHint::Apac),
            Self::DAD => Some(LocationHint::Apac),
            Self::DAR => Some(LocationHint::Afr),
            Self::DEL => Some(LocationHint::Apac),
            Self::DEN => Some(LocationHint::WNam),
            Self::DEX => None,
            Self::DFW => Some(LocationHint::WNam),
            Self::DKR => Some(LocationHint::WEur),
            Self::DLC => None,
            Self::DLP => None,
            Self::DME => Some(LocationHint::Me),
            Self::DMM => Some(LocationHint::WEur),
            Self::DOH => Some(LocationHint::Me),
            Self::DPS => Some(LocationHint::Apac),
            Self::DTW => Some(LocationHint::Sam),
            Self::DUB => Some(LocationHint::Afr),
            Self::DUR => Some(LocationHint::WEur),
            Self::DUS => Some(LocationHint::WEur),
            Self::DXB => Some(LocationHint::Apac),
            Self::EBB => Some(LocationHint::Afr),
            Self::EBL => Some(LocationHint::EEur),
            Self::EVN => Some(LocationHint::WEur),
            Self::EWR => Some(LocationHint::Sam),
            Self::EZE => Some(LocationHint::ENam),
            Self::FCO => Some(LocationHint::Me),
            Self::FIH => None,
            Self::FLN => Some(LocationHint::ENam),
            Self::FOC => None,
            Self::FOR => Some(LocationHint::ENam),
            Self::FRA => Some(LocationHint::EEur),
            Self::FRU => Some(LocationHint::Me),
            Self::FSD => Some(LocationHint::ENam),
            Self::FUK => Some(LocationHint::Apac),
            Self::FUO => None,
            Self::GBE => Some(LocationHint::WEur),
            Self::GDL => Some(LocationHint::WNam),
            Self::GEO => Some(LocationHint::Sam),
            Self::GIG => Some(LocationHint::Sam),
            Self::GND => None,
            Self::GOT => Some(LocationHint::WEur),
            Self::GRU => Some(LocationHint::Sam),
            Self::GUA => Some(LocationHint::ENam),
            Self::GUM => Some(LocationHint::WNam),
            Self::GVA => Some(LocationHint::EEur),
            Self::GYD => Some(LocationHint::WEur),
            Self::GYE => Some(LocationHint::ENam),
            Self::GYN => None,
            Self::HAK => None,
            Self::HAM => Some(LocationHint::Me),
            Self::HAN => Some(LocationHint::Apac),
            Self::HBA => None,
            Self::HEL => Some(LocationHint::Me),
            Self::HFA => Some(LocationHint::Afr),
            Self::HGH => None,
            Self::HKG => Some(LocationHint::Apac),
            Self::HNL => Some(LocationHint::WNam),
            Self::HRE => Some(LocationHint::Afr),
            Self::HYD => Some(LocationHint::Apac),
            Self::HYN => None,
            Self::IAD => Some(LocationHint::ENam),
            Self::IAH => Some(LocationHint::ENam),
            Self::ICN => Some(LocationHint::Apac),
            Self::IND => Some(LocationHint::Sam),
            Self::ISB => Some(LocationHint::Apac),
            Self::IST => Some(LocationHint::EEur),
            Self::ISU => Some(LocationHint::Me),
            Self::IXC => Some(LocationHint::Apac),
            Self::JAX => None,
            Self::JDO => Some(LocationHint::Sam),
            Self::JED => Some(LocationHint::EEur),
            Self::JHB => None,
            Self::JIB => Some(LocationHint::Afr),
            Self::JNB => Some(LocationHint::Afr),
            Self::JOG => None,
            Self::JOI => Some(LocationHint::Sam),
            Self::JXG => None,
            Self::KBP => Some(LocationHint::EEur),
            Self::KCH => Some(LocationHint::Apac),
            Self::KEF => Some(LocationHint::WEur),
            Self::KGL => Some(LocationHint::WEur),
            Self::KHH => Some(LocationHint::Apac),
            Self::KHI => Some(LocationHint::Apac),
            Self::KHN => None,
            Self::KIN => Some(LocationHint::Sam),
            Self::KIV => Some(LocationHint::EEur),
            Self::KIX => Some(LocationHint::Apac),
            Self::KJA => Some(LocationHint::EEur),
            Self::KMG => None,
            Self::KNU => Some(LocationHint::Apac),
            Self::KTM => Some(LocationHint::Apac),
            Self::KUL => Some(LocationHint::Apac),
            Self::KWE => None,
            Self::KWI => Some(LocationHint::WEur),
            Self::LAD => Some(LocationHint::WEur),
            Self::LAS => Some(LocationHint::WNam),
            Self::LAX => Some(LocationHint::WNam),
            Self::LCA => Some(LocationHint::Afr),
            Self::LED => Some(LocationHint::EEur),
            Self::LHE => Some(LocationHint::Apac),
            Self::LHR => Some(LocationHint::Afr),
            Self::LIM => Some(LocationHint::Sam),
            Self::LIS => Some(LocationHint::WEur),
            Self::LLK => Some(LocationHint::EEur),
            Self::LLW => None,
            Self::LOS => Some(LocationHint::WEur),
            Self::LPB => Some(LocationHint::ENam),
            Self::LUN => None,
            Self::LUX => Some(LocationHint::Afr),
            Self::LYS => None,
            Self::MAA => Some(LocationHint::Apac),
            Self::MAD => Some(LocationHint::Afr),
            Self::MAN => Some(LocationHint::Afr),
            Self::MAO => Some(LocationHint::Sam),
            Self::MBA => None,
            Self::MCI => Some(LocationHint::ENam),
            Self::MCT => Some(LocationHint::EEur),
            Self::MDE => Some(LocationHint::Sam),
            Self::MEL => Some(LocationHint::Oc),
            Self::MEM => Some(LocationHint::ENam),
            Self::MEX => Some(LocationHint::Sam),
            Self::MFM => Some(LocationHint::Apac),
            Self::MIA => Some(LocationHint::Sam),
            Self::MLA => None,
            Self::MLE => Some(LocationHint::Afr),
            Self::MLG => None,
            Self::MNL => Some(LocationHint::Apac),
            Self::MPM => Some(LocationHint::WEur),
            Self::MRS => Some(LocationHint::WEur),
            Self::MRU => Some(LocationHint::Apac),
            Self::MSP => Some(LocationHint::Sam),
            Self::MSQ => Some(LocationHint::Me),
            Self::MUC => Some(LocationHint::EEur),
            Self::MXP => Some(LocationHint::EEur),
            Self::NAG => Some(LocationHint::Apac),
            Self::NBO => Some(LocationHint::WEur),
            Self::NJF => Some(LocationHint::EEur),
            Self::NNG => None,
            Self::NOU => Some(LocationHint::Oc),
            Self::NQN => Some(LocationHint::ENam),
            Self::NQZ => None,
            Self::NRT => Some(LocationHint::Apac),
            Self::NVT => Some(LocationHint::ENam),
            Self::OKA => Some(LocationHint::Apac),
            Self::OKC => Some(LocationHint::Sam),
            Self::OMA => Some(LocationHint::WNam),
            Self::ORD => Some(LocationHint::ENam),
            Self::ORF => None,
            Self::ORN => Some(LocationHint::Afr),
            Self::OSL => Some(LocationHint::EEur),
            Self::OTP => Some(LocationHint::EEur),
            Self::OUA => None,
            Self::PAT => Some(LocationHint::Apac),
            Self::PBH => Some(LocationHint::Apac),
            Self::PBM => Some(LocationHint::ENam),
            Self::PDX => Some(LocationHint::WNam),
            Self::PER => Some(LocationHint::Oc),
            Self::PHL => Some(LocationHint::ENam),
            Self::PHX => Some(LocationHint::WNam),
            Self::PIT => Some(LocationHint::ENam),
            Self::PKX => None,
            Self::PMO => Some(LocationHint::Me),
            Self::PMW => Some(LocationHint::Sam),
            Self::PNH => Some(LocationHint::Apac),
            Self::POA => Some(LocationHint::Sam),
            Self::POS => Some(LocationHint::Sam),
            Self::PPT => Some(LocationHint::WNam),
            Self::PRG => Some(LocationHint::Me),
            Self::PTY => Some(LocationHint::ENam),
            Self::QRO => Some(LocationHint::WNam),
            Self::QWJ => Some(LocationHint::Sam),
            Self::RAO => Some(LocationHint::Sam),
            Self::RDU => Some(LocationHint::ENam),
            Self::REC => Some(LocationHint::Sam),
            Self::RIC => Some(LocationHint::ENam),
            Self::RIX => Some(LocationHint::EEur),
            Self::RUH => Some(LocationHint::Me),
            Self::RUN => Some(LocationHint::WEur),
            Self::SAN => Some(LocationHint::WNam),
            Self::SAP => Some(LocationHint::ENam),
            Self::SAT => Some(LocationHint::WNam),
            Self::SCL => Some(LocationHint::ENam),
            Self::SDQ => Some(LocationHint::ENam),
            Self::SEA => Some(LocationHint::WNam),
            Self::SFO => None,
            Self::SGN => Some(LocationHint::Apac),
            Self::SHA => None,
            Self::SIN => Some(LocationHint::Apac),
            Self::SJC => Some(LocationHint::WNam),
            Self::SJK => Some(LocationHint::ENam),
            Self::SJO => Some(LocationHint::Sam),
            Self::SJP => Some(LocationHint::Sam),
            Self::SJU => Some(LocationHint::Sam),
            Self::SJW => None,
            Self::SKG => Some(LocationHint::Me),
            Self::SKP => None,
            Self::SLC => Some(LocationHint::WNam),
            Self::SMF => Some(LocationHint::WNam),
            Self::SOD => Some(LocationHint::ENam),
            Self::SOF => Some(LocationHint::EEur),
            Self::SSA => Some(LocationHint::ENam),
            Self::STI => Some(LocationHint::ENam),
            Self::STL => Some(LocationHint::ENam),
            Self::STR => Some(LocationHint::Me),
            Self::SUV => Some(LocationHint::Oc),
            Self::SYD => Some(LocationHint::Oc),
            Self::SZX => None,
            Self::TAO => None,
            Self::TBS => Some(LocationHint::Me),
            Self::TEN => None,
            Self::TGU => Some(LocationHint::ENam),
            Self::TIA => Some(LocationHint::EEur),
            Self::TLH => Some(LocationHint::Sam),
            Self::TLL => Some(LocationHint::Me),
            Self::TLV => Some(LocationHint::Afr),
            Self::TNA => None,
            Self::TNR => Some(LocationHint::WEur),
            Self::TPA => Some(LocationHint::Sam),
            Self::TPE => Some(LocationHint::Apac),
            Self::TUN => Some(LocationHint::WEur),
            Self::TXL => Some(LocationHint::EEur),
            Self::TYN => None,
            Self::UDI => Some(LocationHint::ENam),
            Self::UIO => Some(LocationHint::Sam),
            Self::ULN => Some(LocationHint::EEur),
            Self::URT => Some(LocationHint::Apac),
            Self::VCP => Some(LocationHint::Sam),
            Self::VIE => Some(LocationHint::Me),
            Self::VIX => None,
            Self::VNO => Some(LocationHint::Me),
            Self::VTE => Some(LocationHint::Apac),
            Self::WAW => Some(LocationHint::Me),
            Self::WDH => None,
            Self::WRO => Some(LocationHint::Me),
            Self::XAP => Some(LocationHint::Sam),
            Self::XFN => None,
            Self::XIY => None,
            Self::XNH => Some(LocationHint::EEur),
            Self::XNN => None,
            Self::YHZ => Some(LocationHint::ENam),
            Self::YOW => Some(LocationHint::Sam),
            Self::YUL => Some(LocationHint::Sam),
            Self::YVR => Some(LocationHint::WNam),
            Self::YWG => Some(LocationHint::Sam),
            Self::YXE => Some(LocationHint::WNam),
            Self::YYC => Some(LocationHint::WNam),
            Self::YYZ => Some(LocationHint::ENam),
            Self::ZAG => Some(LocationHint::EEur),
            Self::ZDM => Some(LocationHint::Afr),
            Self::ZRH => Some(LocationHint::EEur),
        }
    }

    /// Parse a colo from its 3-letter code.
    pub fn from_code(code: &str) -> Option<Self> {
        match code {
            "AAE" => Some(Self::AAE),
            "ABJ" => Some(Self::ABJ),
            "ABQ" => Some(Self::ABQ),
            "ACC" => Some(Self::ACC),
            "ADB" => Some(Self::ADB),
            "ADD" => Some(Self::ADD),
            "ADL" => Some(Self::ADL),
            "AGR" => Some(Self::AGR),
            "AKL" => Some(Self::AKL),
            "AKX" => Some(Self::AKX),
            "ALA" => Some(Self::ALA),
            "ALG" => Some(Self::ALG),
            "AMD" => Some(Self::AMD),
            "AMM" => Some(Self::AMM),
            "AMS" => Some(Self::AMS),
            "ANC" => Some(Self::ANC),
            "ARI" => Some(Self::ARI),
            "ARN" => Some(Self::ARN),
            "ARU" => Some(Self::ARU),
            "ASK" => Some(Self::ASK),
            "ASU" => Some(Self::ASU),
            "ATH" => Some(Self::ATH),
            "ATL" => Some(Self::ATL),
            "AUS" => Some(Self::AUS),
            "BAH" => Some(Self::BAH),
            "BAQ" => Some(Self::BAQ),
            "BCN" => Some(Self::BCN),
            "BEG" => Some(Self::BEG),
            "BEL" => Some(Self::BEL),
            "BEY" => Some(Self::BEY),
            "BGI" => Some(Self::BGI),
            "BGR" => Some(Self::BGR),
            "BGW" => Some(Self::BGW),
            "BHY" => Some(Self::BHY),
            "BKK" => Some(Self::BKK),
            "BLR" => Some(Self::BLR),
            "BNA" => Some(Self::BNA),
            "BNE" => Some(Self::BNE),
            "BNU" => Some(Self::BNU),
            "BOD" => Some(Self::BOD),
            "BOG" => Some(Self::BOG),
            "BOM" => Some(Self::BOM),
            "BOS" => Some(Self::BOS),
            "BRU" => Some(Self::BRU),
            "BSB" => Some(Self::BSB),
            "BSR" => Some(Self::BSR),
            "BTS" => Some(Self::BTS),
            "BUD" => Some(Self::BUD),
            "BUF" => Some(Self::BUF),
            "BWN" => Some(Self::BWN),
            "CAI" => Some(Self::CAI),
            "CAN" => Some(Self::CAN),
            "CAW" => Some(Self::CAW),
            "CBR" => Some(Self::CBR),
            "CCP" => Some(Self::CCP),
            "CCU" => Some(Self::CCU),
            "CDG" => Some(Self::CDG),
            "CEB" => Some(Self::CEB),
            "CFC" => Some(Self::CFC),
            "CGB" => Some(Self::CGB),
            "CGD" => Some(Self::CGD),
            "CGK" => Some(Self::CGK),
            "CGO" => Some(Self::CGO),
            "CGP" => Some(Self::CGP),
            "CGY" => Some(Self::CGY),
            "CHC" => Some(Self::CHC),
            "CJB" => Some(Self::CJB),
            "CKG" => Some(Self::CKG),
            "CLE" => Some(Self::CLE),
            "CLO" => Some(Self::CLO),
            "CLT" => Some(Self::CLT),
            "CMB" => Some(Self::CMB),
            "CMH" => Some(Self::CMH),
            "CNF" => Some(Self::CNF),
            "CNI" => Some(Self::CNI),
            "CNN" => Some(Self::CNN),
            "CNX" => Some(Self::CNX),
            "COK" => Some(Self::COK),
            "COR" => Some(Self::COR),
            "CPH" => Some(Self::CPH),
            "CPT" => Some(Self::CPT),
            "CRK" => Some(Self::CRK),
            "CSX" => Some(Self::CSX),
            "CTU" => Some(Self::CTU),
            "CWB" => Some(Self::CWB),
            "CZL" => Some(Self::CZL),
            "CZX" => Some(Self::CZX),
            "DAC" => Some(Self::DAC),
            "DAD" => Some(Self::DAD),
            "DAR" => Some(Self::DAR),
            "DEL" => Some(Self::DEL),
            "DEN" => Some(Self::DEN),
            "DEX" => Some(Self::DEX),
            "DFW" => Some(Self::DFW),
            "DKR" => Some(Self::DKR),
            "DLC" => Some(Self::DLC),
            "DLP" => Some(Self::DLP),
            "DME" => Some(Self::DME),
            "DMM" => Some(Self::DMM),
            "DOH" => Some(Self::DOH),
            "DPS" => Some(Self::DPS),
            "DTW" => Some(Self::DTW),
            "DUB" => Some(Self::DUB),
            "DUR" => Some(Self::DUR),
            "DUS" => Some(Self::DUS),
            "DXB" => Some(Self::DXB),
            "EBB" => Some(Self::EBB),
            "EBL" => Some(Self::EBL),
            "EVN" => Some(Self::EVN),
            "EWR" => Some(Self::EWR),
            "EZE" => Some(Self::EZE),
            "FCO" => Some(Self::FCO),
            "FIH" => Some(Self::FIH),
            "FLN" => Some(Self::FLN),
            "FOC" => Some(Self::FOC),
            "FOR" => Some(Self::FOR),
            "FRA" => Some(Self::FRA),
            "FRU" => Some(Self::FRU),
            "FSD" => Some(Self::FSD),
            "FUK" => Some(Self::FUK),
            "FUO" => Some(Self::FUO),
            "GBE" => Some(Self::GBE),
            "GDL" => Some(Self::GDL),
            "GEO" => Some(Self::GEO),
            "GIG" => Some(Self::GIG),
            "GND" => Some(Self::GND),
            "GOT" => Some(Self::GOT),
            "GRU" => Some(Self::GRU),
            "GUA" => Some(Self::GUA),
            "GUM" => Some(Self::GUM),
            "GVA" => Some(Self::GVA),
            "GYD" => Some(Self::GYD),
            "GYE" => Some(Self::GYE),
            "GYN" => Some(Self::GYN),
            "HAK" => Some(Self::HAK),
            "HAM" => Some(Self::HAM),
            "HAN" => Some(Self::HAN),
            "HBA" => Some(Self::HBA),
            "HEL" => Some(Self::HEL),
            "HFA" => Some(Self::HFA),
            "HGH" => Some(Self::HGH),
            "HKG" => Some(Self::HKG),
            "HNL" => Some(Self::HNL),
            "HRE" => Some(Self::HRE),
            "HYD" => Some(Self::HYD),
            "HYN" => Some(Self::HYN),
            "IAD" => Some(Self::IAD),
            "IAH" => Some(Self::IAH),
            "ICN" => Some(Self::ICN),
            "IND" => Some(Self::IND),
            "ISB" => Some(Self::ISB),
            "IST" => Some(Self::IST),
            "ISU" => Some(Self::ISU),
            "IXC" => Some(Self::IXC),
            "JAX" => Some(Self::JAX),
            "JDO" => Some(Self::JDO),
            "JED" => Some(Self::JED),
            "JHB" => Some(Self::JHB),
            "JIB" => Some(Self::JIB),
            "JNB" => Some(Self::JNB),
            "JOG" => Some(Self::JOG),
            "JOI" => Some(Self::JOI),
            "JXG" => Some(Self::JXG),
            "KBP" => Some(Self::KBP),
            "KCH" => Some(Self::KCH),
            "KEF" => Some(Self::KEF),
            "KGL" => Some(Self::KGL),
            "KHH" => Some(Self::KHH),
            "KHI" => Some(Self::KHI),
            "KHN" => Some(Self::KHN),
            "KIN" => Some(Self::KIN),
            "KIV" => Some(Self::KIV),
            "KIX" => Some(Self::KIX),
            "KJA" => Some(Self::KJA),
            "KMG" => Some(Self::KMG),
            "KNU" => Some(Self::KNU),
            "KTM" => Some(Self::KTM),
            "KUL" => Some(Self::KUL),
            "KWE" => Some(Self::KWE),
            "KWI" => Some(Self::KWI),
            "LAD" => Some(Self::LAD),
            "LAS" => Some(Self::LAS),
            "LAX" => Some(Self::LAX),
            "LCA" => Some(Self::LCA),
            "LED" => Some(Self::LED),
            "LHE" => Some(Self::LHE),
            "LHR" => Some(Self::LHR),
            "LIM" => Some(Self::LIM),
            "LIS" => Some(Self::LIS),
            "LLK" => Some(Self::LLK),
            "LLW" => Some(Self::LLW),
            "LOS" => Some(Self::LOS),
            "LPB" => Some(Self::LPB),
            "LUN" => Some(Self::LUN),
            "LUX" => Some(Self::LUX),
            "LYS" => Some(Self::LYS),
            "MAA" => Some(Self::MAA),
            "MAD" => Some(Self::MAD),
            "MAN" => Some(Self::MAN),
            "MAO" => Some(Self::MAO),
            "MBA" => Some(Self::MBA),
            "MCI" => Some(Self::MCI),
            "MCT" => Some(Self::MCT),
            "MDE" => Some(Self::MDE),
            "MEL" => Some(Self::MEL),
            "MEM" => Some(Self::MEM),
            "MEX" => Some(Self::MEX),
            "MFM" => Some(Self::MFM),
            "MIA" => Some(Self::MIA),
            "MLA" => Some(Self::MLA),
            "MLE" => Some(Self::MLE),
            "MLG" => Some(Self::MLG),
            "MNL" => Some(Self::MNL),
            "MPM" => Some(Self::MPM),
            "MRS" => Some(Self::MRS),
            "MRU" => Some(Self::MRU),
            "MSP" => Some(Self::MSP),
            "MSQ" => Some(Self::MSQ),
            "MUC" => Some(Self::MUC),
            "MXP" => Some(Self::MXP),
            "NAG" => Some(Self::NAG),
            "NBO" => Some(Self::NBO),
            "NJF" => Some(Self::NJF),
            "NNG" => Some(Self::NNG),
            "NOU" => Some(Self::NOU),
            "NQN" => Some(Self::NQN),
            "NQZ" => Some(Self::NQZ),
            "NRT" => Some(Self::NRT),
            "NVT" => Some(Self::NVT),
            "OKA" => Some(Self::OKA),
            "OKC" => Some(Self::OKC),
            "OMA" => Some(Self::OMA),
            "ORD" => Some(Self::ORD),
            "ORF" => Some(Self::ORF),
            "ORN" => Some(Self::ORN),
            "OSL" => Some(Self::OSL),
            "OTP" => Some(Self::OTP),
            "OUA" => Some(Self::OUA),
            "PAT" => Some(Self::PAT),
            "PBH" => Some(Self::PBH),
            "PBM" => Some(Self::PBM),
            "PDX" => Some(Self::PDX),
            "PER" => Some(Self::PER),
            "PHL" => Some(Self::PHL),
            "PHX" => Some(Self::PHX),
            "PIT" => Some(Self::PIT),
            "PKX" => Some(Self::PKX),
            "PMO" => Some(Self::PMO),
            "PMW" => Some(Self::PMW),
            "PNH" => Some(Self::PNH),
            "POA" => Some(Self::POA),
            "POS" => Some(Self::POS),
            "PPT" => Some(Self::PPT),
            "PRG" => Some(Self::PRG),
            "PTY" => Some(Self::PTY),
            "QRO" => Some(Self::QRO),
            "QWJ" => Some(Self::QWJ),
            "RAO" => Some(Self::RAO),
            "RDU" => Some(Self::RDU),
            "REC" => Some(Self::REC),
            "RIC" => Some(Self::RIC),
            "RIX" => Some(Self::RIX),
            "RUH" => Some(Self::RUH),
            "RUN" => Some(Self::RUN),
            "SAN" => Some(Self::SAN),
            "SAP" => Some(Self::SAP),
            "SAT" => Some(Self::SAT),
            "SCL" => Some(Self::SCL),
            "SDQ" => Some(Self::SDQ),
            "SEA" => Some(Self::SEA),
            "SFO" => Some(Self::SFO),
            "SGN" => Some(Self::SGN),
            "SHA" => Some(Self::SHA),
            "SIN" => Some(Self::SIN),
            "SJC" => Some(Self::SJC),
            "SJK" => Some(Self::SJK),
            "SJO" => Some(Self::SJO),
            "SJP" => Some(Self::SJP),
            "SJU" => Some(Self::SJU),
            "SJW" => Some(Self::SJW),
            "SKG" => Some(Self::SKG),
            "SKP" => Some(Self::SKP),
            "SLC" => Some(Self::SLC),
            "SMF" => Some(Self::SMF),
            "SOD" => Some(Self::SOD),
            "SOF" => Some(Self::SOF),
            "SSA" => Some(Self::SSA),
            "STI" => Some(Self::STI),
            "STL" => Some(Self::STL),
            "STR" => Some(Self::STR),
            "SUV" => Some(Self::SUV),
            "SYD" => Some(Self::SYD),
            "SZX" => Some(Self::SZX),
            "TAO" => Some(Self::TAO),
            "TBS" => Some(Self::TBS),
            "TEN" => Some(Self::TEN),
            "TGU" => Some(Self::TGU),
            "TIA" => Some(Self::TIA),
            "TLH" => Some(Self::TLH),
            "TLL" => Some(Self::TLL),
            "TLV" => Some(Self::TLV),
            "TNA" => Some(Self::TNA),
            "TNR" => Some(Self::TNR),
            "TPA" => Some(Self::TPA),
            "TPE" => Some(Self::TPE),
            "TUN" => Some(Self::TUN),
            "TXL" => Some(Self::TXL),
            "TYN" => Some(Self::TYN),
            "UDI" => Some(Self::UDI),
            "UIO" => Some(Self::UIO),
            "ULN" => Some(Self::ULN),
            "URT" => Some(Self::URT),
            "VCP" => Some(Self::VCP),
            "VIE" => Some(Self::VIE),
            "VIX" => Some(Self::VIX),
            "VNO" => Some(Self::VNO),
            "VTE" => Some(Self::VTE),
            "WAW" => Some(Self::WAW),
            "WDH" => Some(Self::WDH),
            "WRO" => Some(Self::WRO),
            "XAP" => Some(Self::XAP),
            "XFN" => Some(Self::XFN),
            "XIY" => Some(Self::XIY),
            "XNH" => Some(Self::XNH),
            "XNN" => Some(Self::XNN),
            "YHZ" => Some(Self::YHZ),
            "YOW" => Some(Self::YOW),
            "YUL" => Some(Self::YUL),
            "YVR" => Some(Self::YVR),
            "YWG" => Some(Self::YWG),
            "YXE" => Some(Self::YXE),
            "YYC" => Some(Self::YYC),
            "YYZ" => Some(Self::YYZ),
            "ZAG" => Some(Self::ZAG),
            "ZDM" => Some(Self::ZDM),
            "ZRH" => Some(Self::ZRH),
            _ => None,
        }
    }

    /// Returns all colos.
    pub const ALL: &'static [Colo] = &[
        Self::AAE,
        Self::ABJ,
        Self::ABQ,
        Self::ACC,
        Self::ADB,
        Self::ADD,
        Self::ADL,
        Self::AGR,
        Self::AKL,
        Self::AKX,
        Self::ALA,
        Self::ALG,
        Self::AMD,
        Self::AMM,
        Self::AMS,
        Self::ANC,
        Self::ARI,
        Self::ARN,
        Self::ARU,
        Self::ASK,
        Self::ASU,
        Self::ATH,
        Self::ATL,
        Self::AUS,
        Self::BAH,
        Self::BAQ,
        Self::BCN,
        Self::BEG,
        Self::BEL,
        Self::BEY,
        Self::BGI,
        Self::BGR,
        Self::BGW,
        Self::BHY,
        Self::BKK,
        Self::BLR,
        Self::BNA,
        Self::BNE,
        Self::BNU,
        Self::BOD,
        Self::BOG,
        Self::BOM,
        Self::BOS,
        Self::BRU,
        Self::BSB,
        Self::BSR,
        Self::BTS,
        Self::BUD,
        Self::BUF,
        Self::BWN,
        Self::CAI,
        Self::CAN,
        Self::CAW,
        Self::CBR,
        Self::CCP,
        Self::CCU,
        Self::CDG,
        Self::CEB,
        Self::CFC,
        Self::CGB,
        Self::CGD,
        Self::CGK,
        Self::CGO,
        Self::CGP,
        Self::CGY,
        Self::CHC,
        Self::CJB,
        Self::CKG,
        Self::CLE,
        Self::CLO,
        Self::CLT,
        Self::CMB,
        Self::CMH,
        Self::CNF,
        Self::CNI,
        Self::CNN,
        Self::CNX,
        Self::COK,
        Self::COR,
        Self::CPH,
        Self::CPT,
        Self::CRK,
        Self::CSX,
        Self::CTU,
        Self::CWB,
        Self::CZL,
        Self::CZX,
        Self::DAC,
        Self::DAD,
        Self::DAR,
        Self::DEL,
        Self::DEN,
        Self::DEX,
        Self::DFW,
        Self::DKR,
        Self::DLC,
        Self::DLP,
        Self::DME,
        Self::DMM,
        Self::DOH,
        Self::DPS,
        Self::DTW,
        Self::DUB,
        Self::DUR,
        Self::DUS,
        Self::DXB,
        Self::EBB,
        Self::EBL,
        Self::EVN,
        Self::EWR,
        Self::EZE,
        Self::FCO,
        Self::FIH,
        Self::FLN,
        Self::FOC,
        Self::FOR,
        Self::FRA,
        Self::FRU,
        Self::FSD,
        Self::FUK,
        Self::FUO,
        Self::GBE,
        Self::GDL,
        Self::GEO,
        Self::GIG,
        Self::GND,
        Self::GOT,
        Self::GRU,
        Self::GUA,
        Self::GUM,
        Self::GVA,
        Self::GYD,
        Self::GYE,
        Self::GYN,
        Self::HAK,
        Self::HAM,
        Self::HAN,
        Self::HBA,
        Self::HEL,
        Self::HFA,
        Self::HGH,
        Self::HKG,
        Self::HNL,
        Self::HRE,
        Self::HYD,
        Self::HYN,
        Self::IAD,
        Self::IAH,
        Self::ICN,
        Self::IND,
        Self::ISB,
        Self::IST,
        Self::ISU,
        Self::IXC,
        Self::JAX,
        Self::JDO,
        Self::JED,
        Self::JHB,
        Self::JIB,
        Self::JNB,
        Self::JOG,
        Self::JOI,
        Self::JXG,
        Self::KBP,
        Self::KCH,
        Self::KEF,
        Self::KGL,
        Self::KHH,
        Self::KHI,
        Self::KHN,
        Self::KIN,
        Self::KIV,
        Self::KIX,
        Self::KJA,
        Self::KMG,
        Self::KNU,
        Self::KTM,
        Self::KUL,
        Self::KWE,
        Self::KWI,
        Self::LAD,
        Self::LAS,
        Self::LAX,
        Self::LCA,
        Self::LED,
        Self::LHE,
        Self::LHR,
        Self::LIM,
        Self::LIS,
        Self::LLK,
        Self::LLW,
        Self::LOS,
        Self::LPB,
        Self::LUN,
        Self::LUX,
        Self::LYS,
        Self::MAA,
        Self::MAD,
        Self::MAN,
        Self::MAO,
        Self::MBA,
        Self::MCI,
        Self::MCT,
        Self::MDE,
        Self::MEL,
        Self::MEM,
        Self::MEX,
        Self::MFM,
        Self::MIA,
        Self::MLA,
        Self::MLE,
        Self::MLG,
        Self::MNL,
        Self::MPM,
        Self::MRS,
        Self::MRU,
        Self::MSP,
        Self::MSQ,
        Self::MUC,
        Self::MXP,
        Self::NAG,
        Self::NBO,
        Self::NJF,
        Self::NNG,
        Self::NOU,
        Self::NQN,
        Self::NQZ,
        Self::NRT,
        Self::NVT,
        Self::OKA,
        Self::OKC,
        Self::OMA,
        Self::ORD,
        Self::ORF,
        Self::ORN,
        Self::OSL,
        Self::OTP,
        Self::OUA,
        Self::PAT,
        Self::PBH,
        Self::PBM,
        Self::PDX,
        Self::PER,
        Self::PHL,
        Self::PHX,
        Self::PIT,
        Self::PKX,
        Self::PMO,
        Self::PMW,
        Self::PNH,
        Self::POA,
        Self::POS,
        Self::PPT,
        Self::PRG,
        Self::PTY,
        Self::QRO,
        Self::QWJ,
        Self::RAO,
        Self::RDU,
        Self::REC,
        Self::RIC,
        Self::RIX,
        Self::RUH,
        Self::RUN,
        Self::SAN,
        Self::SAP,
        Self::SAT,
        Self::SCL,
        Self::SDQ,
        Self::SEA,
        Self::SFO,
        Self::SGN,
        Self::SHA,
        Self::SIN,
        Self::SJC,
        Self::SJK,
        Self::SJO,
        Self::SJP,
        Self::SJU,
        Self::SJW,
        Self::SKG,
        Self::SKP,
        Self::SLC,
        Self::SMF,
        Self::SOD,
        Self::SOF,
        Self::SSA,
        Self::STI,
        Self::STL,
        Self::STR,
        Self::SUV,
        Self::SYD,
        Self::SZX,
        Self::TAO,
        Self::TBS,
        Self::TEN,
        Self::TGU,
        Self::TIA,
        Self::TLH,
        Self::TLL,
        Self::TLV,
        Self::TNA,
        Self::TNR,
        Self::TPA,
        Self::TPE,
        Self::TUN,
        Self::TXL,
        Self::TYN,
        Self::UDI,
        Self::UIO,
        Self::ULN,
        Self::URT,
        Self::VCP,
        Self::VIE,
        Self::VIX,
        Self::VNO,
        Self::VTE,
        Self::WAW,
        Self::WDH,
        Self::WRO,
        Self::XAP,
        Self::XFN,
        Self::XIY,
        Self::XNH,
        Self::XNN,
        Self::YHZ,
        Self::YOW,
        Self::YUL,
        Self::YVR,
        Self::YWG,
        Self::YXE,
        Self::YYC,
        Self::YYZ,
        Self::ZAG,
        Self::ZDM,
        Self::ZRH,
    ];
}

impl fmt::Display for Colo {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.write_str(self.code())
    }
}
