use super::builder::geo_enum;
impl Country {
#[must_use]
pub fn is_in_eu(&self) -> bool {
matches!(
self,
Self::Austria
| Self::Belgium
| Self::Bulgaria
| Self::Croatia
| Self::Cyprus
| Self::CzechRepublic
| Self::Denmark
| Self::Estonia
| Self::Finland
| Self::France
| Self::Germany
| Self::Greece
| Self::Hungary
| Self::Ireland
| Self::Italy
| Self::Latvia
| Self::Lithuania
| Self::Luxembourg
| Self::Malta
| Self::Netherlands
| Self::Poland
| Self::Portugal
| Self::Romania
| Self::Slovakia
| Self::Slovenia
| Self::Spain
| Self::Sweden
)
}
#[must_use]
pub fn from_alpha3(code: &str) -> Option<Self> {
Self::ALL.iter().find(|c| c.alpha3() == Some(code)).cloned()
}
#[must_use]
pub fn from_numeric(numeric: u16) -> Option<Self> {
Self::ALL
.iter()
.find(|c| c.numeric() == Some(numeric))
.cloned()
}
}
geo_enum! {
meta CountryMeta {
alpha3: Option<&'static str>,
numeric: Option<u16>,
}
pub enum Country / CountryRef {
Andorra => "AD", "Andorra", { alpha3: Some("AND"), numeric: Some(20) },
UnitedArabEmirates => "AE", "United Arab Emirates", { alpha3: Some("ARE"), numeric: Some(784) },
Afghanistan => "AF", "Afghanistan", { alpha3: Some("AFG"), numeric: Some(4) },
AntiguaAndBarbuda => "AG", "Antigua and Barbuda", { alpha3: Some("ATG"), numeric: Some(28) },
Anguilla => "AI", "Anguilla", { alpha3: Some("AIA"), numeric: Some(660) },
Albania => "AL", "Albania", { alpha3: Some("ALB"), numeric: Some(8) },
Armenia => "AM", "Armenia", { alpha3: Some("ARM"), numeric: Some(51) },
Angola => "AO", "Angola", { alpha3: Some("AGO"), numeric: Some(24) },
Antarctica => "AQ", "Antarctica", { alpha3: Some("ATA"), numeric: Some(10) },
Argentina => "AR", "Argentina", { alpha3: Some("ARG"), numeric: Some(32) },
AmericanSamoa => "AS", "American Samoa", { alpha3: Some("ASM"), numeric: Some(16) },
Austria => "AT", "Austria", { alpha3: Some("AUT"), numeric: Some(40) },
Australia => "AU", "Australia", { alpha3: Some("AUS"), numeric: Some(36) },
Aruba => "AW", "Aruba", { alpha3: Some("ABW"), numeric: Some(533) },
AlandIslands => "AX", "Aland Islands", { alpha3: Some("ALA"), numeric: Some(248) },
Azerbaijan => "AZ", "Azerbaijan", { alpha3: Some("AZE"), numeric: Some(31) },
BosniaAndHerzegovina => "BA", "Bosnia and Herzegovina", { alpha3: Some("BIH"), numeric: Some(70) },
Barbados => "BB", "Barbados", { alpha3: Some("BRB"), numeric: Some(52) },
Bangladesh => "BD", "Bangladesh", { alpha3: Some("BGD"), numeric: Some(50) },
Belgium => "BE", "Belgium", { alpha3: Some("BEL"), numeric: Some(56) },
BurkinaFaso => "BF", "Burkina Faso", { alpha3: Some("BFA"), numeric: Some(854) },
Bulgaria => "BG", "Bulgaria", { alpha3: Some("BGR"), numeric: Some(100) },
Bahrain => "BH", "Bahrain", { alpha3: Some("BHR"), numeric: Some(48) },
Burundi => "BI", "Burundi", { alpha3: Some("BDI"), numeric: Some(108) },
Benin => "BJ", "Benin", { alpha3: Some("BEN"), numeric: Some(204) },
SaintBarthelemy => "BL", "Saint Barthelemy", { alpha3: Some("BLM"), numeric: Some(652) },
Bermuda => "BM", "Bermuda", { alpha3: Some("BMU"), numeric: Some(60) },
Brunei => "BN", "Brunei", { alpha3: Some("BRN"), numeric: Some(96) },
Bolivia => "BO", "Bolivia", { alpha3: Some("BOL"), numeric: Some(68) },
BonaireSintEustatiusAndSaba => "BQ", "Bonaire, Sint Eustatius and Saba", { alpha3: Some("BES"), numeric: Some(535) },
Brazil => "BR", "Brazil", { alpha3: Some("BRA"), numeric: Some(76) },
Bahamas => "BS", "Bahamas", { alpha3: Some("BHS"), numeric: Some(44) },
Bhutan => "BT", "Bhutan", { alpha3: Some("BTN"), numeric: Some(64) },
BouvetIsland => "BV", "Bouvet Island", { alpha3: Some("BVT"), numeric: Some(74) },
Botswana => "BW", "Botswana", { alpha3: Some("BWA"), numeric: Some(72) },
Belarus => "BY", "Belarus", { alpha3: Some("BLR"), numeric: Some(112) },
Belize => "BZ", "Belize", { alpha3: Some("BLZ"), numeric: Some(84) },
Canada => "CA", "Canada", { alpha3: Some("CAN"), numeric: Some(124) },
CocosKeelingIslands => "CC", "Cocos (Keeling) Islands", { alpha3: Some("CCK"), numeric: Some(166) },
DemocraticRepublicOfTheCongo => "CD", "Democratic Republic of the Congo", { alpha3: Some("COD"), numeric: Some(180) },
CentralAfricanRepublic => "CF", "Central African Republic", { alpha3: Some("CAF"), numeric: Some(140) },
Congo => "CG", "Republic of the Congo", { alpha3: Some("COG"), numeric: Some(178) },
Switzerland => "CH", "Switzerland", { alpha3: Some("CHE"), numeric: Some(756) },
CoteDIvoire => "CI", "Cote d'Ivoire", { alpha3: Some("CIV"), numeric: Some(384) },
CookIslands => "CK", "Cook Islands", { alpha3: Some("COK"), numeric: Some(184) },
Chile => "CL", "Chile", { alpha3: Some("CHL"), numeric: Some(152) },
Cameroon => "CM", "Cameroon", { alpha3: Some("CMR"), numeric: Some(120) },
China => "CN", "China", { alpha3: Some("CHN"), numeric: Some(156) },
Colombia => "CO", "Colombia", { alpha3: Some("COL"), numeric: Some(170) },
CostaRica => "CR", "Costa Rica", { alpha3: Some("CRI"), numeric: Some(188) },
Cuba => "CU", "Cuba", { alpha3: Some("CUB"), numeric: Some(192) },
CapeVerde => "CV", "Cape Verde", { alpha3: Some("CPV"), numeric: Some(132) },
Curacao => "CW", "Curacao", { alpha3: Some("CUW"), numeric: Some(531) },
ChristmasIsland => "CX", "Christmas Island", { alpha3: Some("CXR"), numeric: Some(162) },
Cyprus => "CY", "Cyprus", { alpha3: Some("CYP"), numeric: Some(196) },
CzechRepublic => "CZ", "Czechia", { alpha3: Some("CZE"), numeric: Some(203) },
Germany => "DE", "Germany", { alpha3: Some("DEU"), numeric: Some(276) },
Djibouti => "DJ", "Djibouti", { alpha3: Some("DJI"), numeric: Some(262) },
Denmark => "DK", "Denmark", { alpha3: Some("DNK"), numeric: Some(208) },
Dominica => "DM", "Dominica", { alpha3: Some("DMA"), numeric: Some(212) },
DominicanRepublic => "DO", "Dominican Republic", { alpha3: Some("DOM"), numeric: Some(214) },
Algeria => "DZ", "Algeria", { alpha3: Some("DZA"), numeric: Some(12) },
Ecuador => "EC", "Ecuador", { alpha3: Some("ECU"), numeric: Some(218) },
Estonia => "EE", "Estonia", { alpha3: Some("EST"), numeric: Some(233) },
Egypt => "EG", "Egypt", { alpha3: Some("EGY"), numeric: Some(818) },
WesternSahara => "EH", "Western Sahara", { alpha3: Some("ESH"), numeric: Some(732) },
Eritrea => "ER", "Eritrea", { alpha3: Some("ERI"), numeric: Some(232) },
Spain => "ES", "Spain", { alpha3: Some("ESP"), numeric: Some(724) },
Ethiopia => "ET", "Ethiopia", { alpha3: Some("ETH"), numeric: Some(231) },
EuropeanUnion => "EU", "European Union", { alpha3: None, numeric: None },
Finland => "FI", "Finland", { alpha3: Some("FIN"), numeric: Some(246) },
Fiji => "FJ", "Fiji", { alpha3: Some("FJI"), numeric: Some(242) },
FalklandIslands => "FK", "Falkland Islands", { alpha3: Some("FLK"), numeric: Some(238) },
Micronesia => "FM", "Micronesia", { alpha3: Some("FSM"), numeric: Some(583) },
FaroeIslands => "FO", "Faroe Islands", { alpha3: Some("FRO"), numeric: Some(234) },
France => "FR", "France", { alpha3: Some("FRA"), numeric: Some(250) },
Gabon => "GA", "Gabon", { alpha3: Some("GAB"), numeric: Some(266) },
UnitedKingdom => "GB", "United Kingdom", { alpha3: Some("GBR"), numeric: Some(826) },
Grenada => "GD", "Grenada", { alpha3: Some("GRD"), numeric: Some(308) },
Georgia => "GE", "Georgia", { alpha3: Some("GEO"), numeric: Some(268) },
FrenchGuiana => "GF", "French Guiana", { alpha3: Some("GUF"), numeric: Some(254) },
Guernsey => "GG", "Guernsey", { alpha3: Some("GGY"), numeric: Some(831) },
Ghana => "GH", "Ghana", { alpha3: Some("GHA"), numeric: Some(288) },
Gibraltar => "GI", "Gibraltar", { alpha3: Some("GIB"), numeric: Some(292) },
Greenland => "GL", "Greenland", { alpha3: Some("GRL"), numeric: Some(304) },
Gambia => "GM", "Gambia", { alpha3: Some("GMB"), numeric: Some(270) },
Guinea => "GN", "Guinea", { alpha3: Some("GIN"), numeric: Some(324) },
Guadeloupe => "GP", "Guadeloupe", { alpha3: Some("GLP"), numeric: Some(312) },
EquatorialGuinea => "GQ", "Equatorial Guinea", { alpha3: Some("GNQ"), numeric: Some(226) },
Greece => "GR", "Greece", { alpha3: Some("GRC"), numeric: Some(300) },
SouthGeorgiaAndTheSouthSandwichIslands => "GS", "South Georgia and the South Sandwich Islands", { alpha3: Some("SGS"), numeric: Some(239) },
Guatemala => "GT", "Guatemala", { alpha3: Some("GTM"), numeric: Some(320) },
Guam => "GU", "Guam", { alpha3: Some("GUM"), numeric: Some(316) },
GuineaBissau => "GW", "Guinea-Bissau", { alpha3: Some("GNB"), numeric: Some(624) },
Guyana => "GY", "Guyana", { alpha3: Some("GUY"), numeric: Some(328) },
HongKong => "HK", "Hong Kong", { alpha3: Some("HKG"), numeric: Some(344) },
HeardIslandAndMcDonaldIslands => "HM", "Heard Island and McDonald Islands", { alpha3: Some("HMD"), numeric: Some(334) },
Honduras => "HN", "Honduras", { alpha3: Some("HND"), numeric: Some(340) },
Croatia => "HR", "Croatia", { alpha3: Some("HRV"), numeric: Some(191) },
Haiti => "HT", "Haiti", { alpha3: Some("HTI"), numeric: Some(332) },
Hungary => "HU", "Hungary", { alpha3: Some("HUN"), numeric: Some(348) },
Indonesia => "ID", "Indonesia", { alpha3: Some("IDN"), numeric: Some(360) },
Ireland => "IE", "Ireland", { alpha3: Some("IRL"), numeric: Some(372) },
Israel => "IL", "Israel", { alpha3: Some("ISR"), numeric: Some(376) },
IsleOfMan => "IM", "Isle of Man", { alpha3: Some("IMN"), numeric: Some(833) },
India => "IN", "India", { alpha3: Some("IND"), numeric: Some(356) },
BritishIndianOceanTerritory => "IO", "British Indian Ocean Territory", { alpha3: Some("IOT"), numeric: Some(86) },
Iraq => "IQ", "Iraq", { alpha3: Some("IRQ"), numeric: Some(368) },
Iran => "IR", "Iran", { alpha3: Some("IRN"), numeric: Some(364) },
Iceland => "IS", "Iceland", { alpha3: Some("ISL"), numeric: Some(352) },
Italy => "IT", "Italy", { alpha3: Some("ITA"), numeric: Some(380) },
Jersey => "JE", "Jersey", { alpha3: Some("JEY"), numeric: Some(832) },
Jamaica => "JM", "Jamaica", { alpha3: Some("JAM"), numeric: Some(388) },
Jordan => "JO", "Jordan", { alpha3: Some("JOR"), numeric: Some(400) },
Japan => "JP", "Japan", { alpha3: Some("JPN"), numeric: Some(392) },
Kenya => "KE", "Kenya", { alpha3: Some("KEN"), numeric: Some(404) },
Kyrgyzstan => "KG", "Kyrgyzstan", { alpha3: Some("KGZ"), numeric: Some(417) },
Cambodia => "KH", "Cambodia", { alpha3: Some("KHM"), numeric: Some(116) },
Kiribati => "KI", "Kiribati", { alpha3: Some("KIR"), numeric: Some(296) },
Comoros => "KM", "Comoros", { alpha3: Some("COM"), numeric: Some(174) },
SaintKittsAndNevis => "KN", "Saint Kitts and Nevis", { alpha3: Some("KNA"), numeric: Some(659) },
NorthKorea => "KP", "North Korea", { alpha3: Some("PRK"), numeric: Some(408) },
SouthKorea => "KR", "South Korea", { alpha3: Some("KOR"), numeric: Some(410) },
Kuwait => "KW", "Kuwait", { alpha3: Some("KWT"), numeric: Some(414) },
CaymanIslands => "KY", "Cayman Islands", { alpha3: Some("CYM"), numeric: Some(136) },
Kazakhstan => "KZ", "Kazakhstan", { alpha3: Some("KAZ"), numeric: Some(398) },
Laos => "LA", "Laos", { alpha3: Some("LAO"), numeric: Some(418) },
Lebanon => "LB", "Lebanon", { alpha3: Some("LBN"), numeric: Some(422) },
SaintLucia => "LC", "Saint Lucia", { alpha3: Some("LCA"), numeric: Some(662) },
Liechtenstein => "LI", "Liechtenstein", { alpha3: Some("LIE"), numeric: Some(438) },
SriLanka => "LK", "Sri Lanka", { alpha3: Some("LKA"), numeric: Some(144) },
Liberia => "LR", "Liberia", { alpha3: Some("LBR"), numeric: Some(430) },
Lesotho => "LS", "Lesotho", { alpha3: Some("LSO"), numeric: Some(426) },
Lithuania => "LT", "Lithuania", { alpha3: Some("LTU"), numeric: Some(440) },
Luxembourg => "LU", "Luxembourg", { alpha3: Some("LUX"), numeric: Some(442) },
Latvia => "LV", "Latvia", { alpha3: Some("LVA"), numeric: Some(428) },
Libya => "LY", "Libya", { alpha3: Some("LBY"), numeric: Some(434) },
Morocco => "MA", "Morocco", { alpha3: Some("MAR"), numeric: Some(504) },
Monaco => "MC", "Monaco", { alpha3: Some("MCO"), numeric: Some(492) },
Moldova => "MD", "Moldova", { alpha3: Some("MDA"), numeric: Some(498) },
Montenegro => "ME", "Montenegro", { alpha3: Some("MNE"), numeric: Some(499) },
SaintMartin => "MF", "Saint Martin (French part)", { alpha3: Some("MAF"), numeric: Some(663) },
Madagascar => "MG", "Madagascar", { alpha3: Some("MDG"), numeric: Some(450) },
MarshallIslands => "MH", "Marshall Islands", { alpha3: Some("MHL"), numeric: Some(584) },
NorthMacedonia => "MK", "North Macedonia", { alpha3: Some("MKD"), numeric: Some(807) },
Mali => "ML", "Mali", { alpha3: Some("MLI"), numeric: Some(466) },
Myanmar => "MM", "Myanmar", { alpha3: Some("MMR"), numeric: Some(104) },
Mongolia => "MN", "Mongolia", { alpha3: Some("MNG"), numeric: Some(496) },
Macau => "MO", "Macau", { alpha3: Some("MAC"), numeric: Some(446) },
NorthernMarianaIslands => "MP", "Northern Mariana Islands", { alpha3: Some("MNP"), numeric: Some(580) },
Martinique => "MQ", "Martinique", { alpha3: Some("MTQ"), numeric: Some(474) },
Mauritania => "MR", "Mauritania", { alpha3: Some("MRT"), numeric: Some(478) },
Montserrat => "MS", "Montserrat", { alpha3: Some("MSR"), numeric: Some(500) },
Malta => "MT", "Malta", { alpha3: Some("MLT"), numeric: Some(470) },
Mauritius => "MU", "Mauritius", { alpha3: Some("MUS"), numeric: Some(480) },
Maldives => "MV", "Maldives", { alpha3: Some("MDV"), numeric: Some(462) },
Malawi => "MW", "Malawi", { alpha3: Some("MWI"), numeric: Some(454) },
Mexico => "MX", "Mexico", { alpha3: Some("MEX"), numeric: Some(484) },
Malaysia => "MY", "Malaysia", { alpha3: Some("MYS"), numeric: Some(458) },
Mozambique => "MZ", "Mozambique", { alpha3: Some("MOZ"), numeric: Some(508) },
Namibia => "NA", "Namibia", { alpha3: Some("NAM"), numeric: Some(516) },
NewCaledonia => "NC", "New Caledonia", { alpha3: Some("NCL"), numeric: Some(540) },
Niger => "NE", "Niger", { alpha3: Some("NER"), numeric: Some(562) },
NorfolkIsland => "NF", "Norfolk Island", { alpha3: Some("NFK"), numeric: Some(574) },
Nigeria => "NG", "Nigeria", { alpha3: Some("NGA"), numeric: Some(566) },
Nicaragua => "NI", "Nicaragua", { alpha3: Some("NIC"), numeric: Some(558) },
Netherlands => "NL", "Netherlands", { alpha3: Some("NLD"), numeric: Some(528) },
Norway => "NO", "Norway", { alpha3: Some("NOR"), numeric: Some(578) },
Nepal => "NP", "Nepal", { alpha3: Some("NPL"), numeric: Some(524) },
Nauru => "NR", "Nauru", { alpha3: Some("NRU"), numeric: Some(520) },
Niue => "NU", "Niue", { alpha3: Some("NIU"), numeric: Some(570) },
NewZealand => "NZ", "New Zealand", { alpha3: Some("NZL"), numeric: Some(554) },
Oman => "OM", "Oman", { alpha3: Some("OMN"), numeric: Some(512) },
Panama => "PA", "Panama", { alpha3: Some("PAN"), numeric: Some(591) },
Peru => "PE", "Peru", { alpha3: Some("PER"), numeric: Some(604) },
FrenchPolynesia => "PF", "French Polynesia", { alpha3: Some("PYF"), numeric: Some(258) },
PapuaNewGuinea => "PG", "Papua New Guinea", { alpha3: Some("PNG"), numeric: Some(598) },
Philippines => "PH", "Philippines", { alpha3: Some("PHL"), numeric: Some(608) },
Pakistan => "PK", "Pakistan", { alpha3: Some("PAK"), numeric: Some(586) },
Poland => "PL", "Poland", { alpha3: Some("POL"), numeric: Some(616) },
SaintPierreAndMiquelon => "PM", "Saint Pierre and Miquelon", { alpha3: Some("SPM"), numeric: Some(666) },
Pitcairn => "PN", "Pitcairn Islands", { alpha3: Some("PCN"), numeric: Some(612) },
PuertoRico => "PR", "Puerto Rico", { alpha3: Some("PRI"), numeric: Some(630) },
Palestine => "PS", "Palestine", { alpha3: Some("PSE"), numeric: Some(275) },
Portugal => "PT", "Portugal", { alpha3: Some("PRT"), numeric: Some(620) },
Palau => "PW", "Palau", { alpha3: Some("PLW"), numeric: Some(585) },
Paraguay => "PY", "Paraguay", { alpha3: Some("PRY"), numeric: Some(600) },
Qatar => "QA", "Qatar", { alpha3: Some("QAT"), numeric: Some(634) },
Reunion => "RE", "Reunion", { alpha3: Some("REU"), numeric: Some(638) },
Romania => "RO", "Romania", { alpha3: Some("ROU"), numeric: Some(642) },
Serbia => "RS", "Serbia", { alpha3: Some("SRB"), numeric: Some(688) },
Russia => "RU", "Russia", { alpha3: Some("RUS"), numeric: Some(643) },
Rwanda => "RW", "Rwanda", { alpha3: Some("RWA"), numeric: Some(646) },
SaudiArabia => "SA", "Saudi Arabia", { alpha3: Some("SAU"), numeric: Some(682) },
SolomonIslands => "SB", "Solomon Islands", { alpha3: Some("SLB"), numeric: Some(90) },
Seychelles => "SC", "Seychelles", { alpha3: Some("SYC"), numeric: Some(690) },
Sudan => "SD", "Sudan", { alpha3: Some("SDN"), numeric: Some(729) },
Sweden => "SE", "Sweden", { alpha3: Some("SWE"), numeric: Some(752) },
Singapore => "SG", "Singapore", { alpha3: Some("SGP"), numeric: Some(702) },
SaintHelena => "SH", "Saint Helena, Ascension and Tristan da Cunha", { alpha3: Some("SHN"), numeric: Some(654) },
Slovenia => "SI", "Slovenia", { alpha3: Some("SVN"), numeric: Some(705) },
SvalbardAndJanMayen => "SJ", "Svalbard and Jan Mayen", { alpha3: Some("SJM"), numeric: Some(744) },
Slovakia => "SK", "Slovakia", { alpha3: Some("SVK"), numeric: Some(703) },
SierraLeone => "SL", "Sierra Leone", { alpha3: Some("SLE"), numeric: Some(694) },
SanMarino => "SM", "San Marino", { alpha3: Some("SMR"), numeric: Some(674) },
Senegal => "SN", "Senegal", { alpha3: Some("SEN"), numeric: Some(686) },
Somalia => "SO", "Somalia", { alpha3: Some("SOM"), numeric: Some(706) },
Suriname => "SR", "Suriname", { alpha3: Some("SUR"), numeric: Some(740) },
SouthSudan => "SS", "South Sudan", { alpha3: Some("SSD"), numeric: Some(728) },
SaoTomeAndPrincipe => "ST", "Sao Tome and Principe", { alpha3: Some("STP"), numeric: Some(678) },
ElSalvador => "SV", "El Salvador", { alpha3: Some("SLV"), numeric: Some(222) },
SintMaarten => "SX", "Sint Maarten", { alpha3: Some("SXM"), numeric: Some(534) },
Syria => "SY", "Syria", { alpha3: Some("SYR"), numeric: Some(760) },
Eswatini => "SZ", "Eswatini", { alpha3: Some("SWZ"), numeric: Some(748) },
TurksAndCaicosIslands => "TC", "Turks and Caicos Islands", { alpha3: Some("TCA"), numeric: Some(796) },
Chad => "TD", "Chad", { alpha3: Some("TCD"), numeric: Some(148) },
FrenchSouthernTerritories => "TF", "French Southern Territories", { alpha3: Some("ATF"), numeric: Some(260) },
Togo => "TG", "Togo", { alpha3: Some("TGO"), numeric: Some(768) },
Thailand => "TH", "Thailand", { alpha3: Some("THA"), numeric: Some(764) },
Tajikistan => "TJ", "Tajikistan", { alpha3: Some("TJK"), numeric: Some(762) },
Tokelau => "TK", "Tokelau", { alpha3: Some("TKL"), numeric: Some(772) },
TimorLeste => "TL", "Timor-Leste", { alpha3: Some("TLS"), numeric: Some(626) },
Turkmenistan => "TM", "Turkmenistan", { alpha3: Some("TKM"), numeric: Some(795) },
Tunisia => "TN", "Tunisia", { alpha3: Some("TUN"), numeric: Some(788) },
Tonga => "TO", "Tonga", { alpha3: Some("TON"), numeric: Some(776) },
Turkey => "TR", "Turkey", { alpha3: Some("TUR"), numeric: Some(792) },
TrinidadAndTobago => "TT", "Trinidad and Tobago", { alpha3: Some("TTO"), numeric: Some(780) },
Tuvalu => "TV", "Tuvalu", { alpha3: Some("TUV"), numeric: Some(798) },
Taiwan => "TW", "Taiwan", { alpha3: Some("TWN"), numeric: Some(158) },
Tanzania => "TZ", "Tanzania", { alpha3: Some("TZA"), numeric: Some(834) },
Ukraine => "UA", "Ukraine", { alpha3: Some("UKR"), numeric: Some(804) },
Uganda => "UG", "Uganda", { alpha3: Some("UGA"), numeric: Some(800) },
UnitedStatesMinorOutlyingIslands => "UM", "United States Minor Outlying Islands", { alpha3: Some("UMI"), numeric: Some(581) },
UnitedStates => "US", "United States", { alpha3: Some("USA"), numeric: Some(840) },
Uruguay => "UY", "Uruguay", { alpha3: Some("URY"), numeric: Some(858) },
Uzbekistan => "UZ", "Uzbekistan", { alpha3: Some("UZB"), numeric: Some(860) },
VaticanCity => "VA", "Vatican City", { alpha3: Some("VAT"), numeric: Some(336) },
SaintVincentAndTheGrenadines => "VC", "Saint Vincent and the Grenadines", { alpha3: Some("VCT"), numeric: Some(670) },
Venezuela => "VE", "Venezuela", { alpha3: Some("VEN"), numeric: Some(862) },
BritishVirginIslands => "VG", "British Virgin Islands", { alpha3: Some("VGB"), numeric: Some(92) },
UnitedStatesVirginIslands => "VI", "U.S. Virgin Islands", { alpha3: Some("VIR"), numeric: Some(850) },
Vietnam => "VN", "Vietnam", { alpha3: Some("VNM"), numeric: Some(704) },
Vanuatu => "VU", "Vanuatu", { alpha3: Some("VUT"), numeric: Some(548) },
WallisAndFutuna => "WF", "Wallis and Futuna", { alpha3: Some("WLF"), numeric: Some(876) },
Samoa => "WS", "Samoa", { alpha3: Some("WSM"), numeric: Some(882) },
Kosovo => "XK", "Kosovo", { alpha3: Some("XKX"), numeric: Some(983) },
Yemen => "YE", "Yemen", { alpha3: Some("YEM"), numeric: Some(887) },
Mayotte => "YT", "Mayotte", { alpha3: Some("MYT"), numeric: Some(175) },
SouthAfrica => "ZA", "South Africa", { alpha3: Some("ZAF"), numeric: Some(710) },
Zambia => "ZM", "Zambia", { alpha3: Some("ZMB"), numeric: Some(894) },
Zimbabwe => "ZW", "Zimbabwe", { alpha3: Some("ZWE"), numeric: Some(716) },
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn known_lookups() {
assert_eq!(Country::from_code("BE"), Country::Belgium);
assert_eq!(Country::Belgium.name(), Some("Belgium"));
assert_eq!(Country::UnitedStates.code(), "US");
assert_eq!(Country::from_code("TW"), Country::Taiwan);
assert_eq!(Country::from_code("XK"), Country::Kosovo);
assert_eq!(Country::from_code("ZZ"), Country::Unknown("ZZ".into()));
}
#[test]
fn alpha3_and_numeric() {
assert_eq!(Country::Belgium.alpha3(), Some("BEL"));
assert_eq!(Country::Belgium.numeric(), Some(56));
assert_eq!(Country::UnitedStates.alpha3(), Some("USA"));
assert_eq!(Country::UnitedStates.numeric(), Some(840));
assert_eq!(Country::Kosovo.alpha3(), Some("XKX"));
assert_eq!(Country::EuropeanUnion.alpha3(), None);
assert_eq!(Country::EuropeanUnion.numeric(), None);
assert_eq!(Country::from_code("ZZ").alpha3(), None);
assert_eq!(Country::from_code("ZZ").numeric(), None);
assert_eq!(CountryRef::Belgium.alpha3(), Some("BEL"));
}
#[test]
fn reverse_lookups() {
assert_eq!(Country::from_alpha3("USA"), Some(Country::UnitedStates));
assert_eq!(Country::from_alpha3("BEL"), Some(Country::Belgium));
assert_eq!(Country::from_alpha3("ZZZ"), None);
assert_eq!(Country::from_numeric(840), Some(Country::UnitedStates));
assert_eq!(Country::from_numeric(56), Some(Country::Belgium));
assert_eq!(Country::from_numeric(1), None);
}
#[test]
fn all_codes_roundtrip() {
assert_eq!(Country::ALL.len(), 251);
for c in Country::ALL {
assert!(c.is_known(), "{c:?} should be known");
assert_eq!(Country::from_code(c.code()), c.clone());
assert!(c.name().is_some());
if !matches!(c, Country::EuropeanUnion) {
assert!(c.alpha3().is_some(), "{c:?} missing alpha-3");
assert!(c.numeric().is_some(), "{c:?} missing numeric");
}
}
}
}