use std::{
cmp::Ordering,
fmt,
hash::{Hash, Hasher},
io::{self, Error, ErrorKind},
};
pub const ALPHA2_CODES: &[Alpha2] = &[
Alpha2 { code: "AD", country_name: "Andorra" },
Alpha2 { code: "AE", country_name: "United Arab Emirates" },
Alpha2 { code: "AF", country_name: "Afghanistan" },
Alpha2 { code: "AG", country_name: "Antigua and Barbuda" },
Alpha2 { code: "AI", country_name: "Anguilla" },
Alpha2 { code: "AL", country_name: "Albania" },
Alpha2 { code: "AM", country_name: "Armenia" },
Alpha2 { code: "AO", country_name: "Angola" },
Alpha2 { code: "AQ", country_name: "Antarctica" },
Alpha2 { code: "AR", country_name: "Argentina" },
Alpha2 { code: "AS", country_name: "American Samoa" },
Alpha2 { code: "AT", country_name: "Austria" },
Alpha2 { code: "AU", country_name: "Australia" },
Alpha2 { code: "AW", country_name: "Aruba" },
Alpha2 { code: "AX", country_name: "Åland Islands" },
Alpha2 { code: "AZ", country_name: "Azerbaijan" },
Alpha2 { code: "BA", country_name: "Bosnia and Herzegovina" },
Alpha2 { code: "BB", country_name: "Barbados" },
Alpha2 { code: "BD", country_name: "Bangladesh" },
Alpha2 { code: "BE", country_name: "Belgium" },
Alpha2 { code: "BF", country_name: "Burkina Faso" },
Alpha2 { code: "BG", country_name: "Bulgaria" },
Alpha2 { code: "BH", country_name: "Bahrain" },
Alpha2 { code: "BI", country_name: "Burundi" },
Alpha2 { code: "BJ", country_name: "Benin" },
Alpha2 { code: "BL", country_name: "Saint Barthélemy" },
Alpha2 { code: "BM", country_name: "Bermuda" },
Alpha2 { code: "BN", country_name: "Brunei Darussalam" },
Alpha2 { code: "BO", country_name: "Bolivia (Plurinational State of)" },
Alpha2 { code: "BQ", country_name: "Bonaire, Sint Eustatius and Saba" },
Alpha2 { code: "BR", country_name: "Brazil" },
Alpha2 { code: "BS", country_name: "Bahamas" },
Alpha2 { code: "BT", country_name: "Bhutan" },
Alpha2 { code: "BV", country_name: "Bouvet Island" },
Alpha2 { code: "BW", country_name: "Botswana" },
Alpha2 { code: "BY", country_name: "Belarus" },
Alpha2 { code: "BZ", country_name: "Belize" },
Alpha2 { code: "CA", country_name: "Canada" },
Alpha2 { code: "CC", country_name: "Cocos (Keeling) Islands" },
Alpha2 { code: "CD", country_name: "Congo, Democratic Republic of the" },
Alpha2 { code: "CF", country_name: "Central African Republic" },
Alpha2 { code: "CG", country_name: "Congo" },
Alpha2 { code: "CH", country_name: "Switzerland" },
Alpha2 { code: "CI", country_name: "Côte d'Ivoire" },
Alpha2 { code: "CK", country_name: "Cook Islands" },
Alpha2 { code: "CL", country_name: "Chile" },
Alpha2 { code: "CM", country_name: "Cameroon" },
Alpha2 { code: "CN", country_name: "China" },
Alpha2 { code: "CO", country_name: "Colombia" },
Alpha2 { code: "CR", country_name: "Costa Rica" },
Alpha2 { code: "CU", country_name: "Cuba" },
Alpha2 { code: "CV", country_name: "Cabo Verde" },
Alpha2 { code: "CW", country_name: "Curaçao" },
Alpha2 { code: "CX", country_name: "Christmas Island" },
Alpha2 { code: "CY", country_name: "Cyprus" },
Alpha2 { code: "CZ", country_name: "Czechia" },
Alpha2 { code: "DE", country_name: "Germany" },
Alpha2 { code: "DJ", country_name: "Djibouti" },
Alpha2 { code: "DK", country_name: "Denmark" },
Alpha2 { code: "DM", country_name: "Dominica" },
Alpha2 { code: "DO", country_name: "Dominican Republic" },
Alpha2 { code: "DZ", country_name: "Algeria" },
Alpha2 { code: "EC", country_name: "Ecuador" },
Alpha2 { code: "EE", country_name: "Estonia" },
Alpha2 { code: "EG", country_name: "Egypt" },
Alpha2 { code: "EH", country_name: "Western Sahara" },
Alpha2 { code: "ER", country_name: "Eritrea" },
Alpha2 { code: "ES", country_name: "Spain" },
Alpha2 { code: "ET", country_name: "Ethiopia" },
Alpha2 { code: "FI", country_name: "Finland" },
Alpha2 { code: "FJ", country_name: "Fiji" },
Alpha2 { code: "FK", country_name: "Falkland Islands (Malvinas)" },
Alpha2 { code: "FM", country_name: "Micronesia (Federated States of)" },
Alpha2 { code: "FO", country_name: "Faroe Islands" },
Alpha2 { code: "FR", country_name: "France" },
Alpha2 { code: "GA", country_name: "Gabon" },
Alpha2 { code: "GB", country_name: "United Kingdom of Great Britain and Northern Ireland" },
Alpha2 { code: "GD", country_name: "Grenada" },
Alpha2 { code: "GE", country_name: "Georgia" },
Alpha2 { code: "GF", country_name: "French Guiana" },
Alpha2 { code: "GG", country_name: "Guernsey" },
Alpha2 { code: "GH", country_name: "Ghana" },
Alpha2 { code: "GI", country_name: "Gibraltar" },
Alpha2 { code: "GL", country_name: "Greenland" },
Alpha2 { code: "GM", country_name: "Gambia" },
Alpha2 { code: "GN", country_name: "Guinea" },
Alpha2 { code: "GP", country_name: "Guadeloupe" },
Alpha2 { code: "GQ", country_name: "Equatorial Guinea" },
Alpha2 { code: "GR", country_name: "Greece" },
Alpha2 { code: "GS", country_name: "South Georgia and the South Sandwich Islands" },
Alpha2 { code: "GT", country_name: "Guatemala" },
Alpha2 { code: "GU", country_name: "Guam" },
Alpha2 { code: "GW", country_name: "Guinea-Bissau" },
Alpha2 { code: "GY", country_name: "Guyana" },
Alpha2 { code: "HK", country_name: "Hong Kong" },
Alpha2 { code: "HM", country_name: "Heard Island and McDonald Islands" },
Alpha2 { code: "HN", country_name: "Honduras" },
Alpha2 { code: "HR", country_name: "Croatia" },
Alpha2 { code: "HT", country_name: "Haiti" },
Alpha2 { code: "HU", country_name: "Hungary" },
Alpha2 { code: "ID", country_name: "Indonesia" },
Alpha2 { code: "IE", country_name: "Ireland" },
Alpha2 { code: "IL", country_name: "Israel" },
Alpha2 { code: "IM", country_name: "Isle of Man" },
Alpha2 { code: "IN", country_name: "India" },
Alpha2 { code: "IO", country_name: "British Indian Ocean Territory" },
Alpha2 { code: "IQ", country_name: "Iraq" },
Alpha2 { code: "IR", country_name: "Iran (Islamic Republic of)" },
Alpha2 { code: "IS", country_name: "Iceland" },
Alpha2 { code: "IT", country_name: "Italy" },
Alpha2 { code: "JE", country_name: "Jersey" },
Alpha2 { code: "JM", country_name: "Jamaica" },
Alpha2 { code: "JO", country_name: "Jordan" },
Alpha2 { code: "JP", country_name: "Japan" },
Alpha2 { code: "KE", country_name: "Kenya" },
Alpha2 { code: "KG", country_name: "Kyrgyzstan" },
Alpha2 { code: "KH", country_name: "Cambodia" },
Alpha2 { code: "KI", country_name: "Kiribati" },
Alpha2 { code: "KM", country_name: "Comoros" },
Alpha2 { code: "KN", country_name: "Saint Kitts and Nevis" },
Alpha2 { code: "KP", country_name: "Korea (Democratic People's Republic of)" },
Alpha2 { code: "KR", country_name: "Korea, Republic of" },
Alpha2 { code: "KW", country_name: "Kuwait" },
Alpha2 { code: "KY", country_name: "Cayman Islands" },
Alpha2 { code: "KZ", country_name: "Kazakhstan" },
Alpha2 { code: "LA", country_name: "Lao People's Democratic Republic" },
Alpha2 { code: "LB", country_name: "Lebanon" },
Alpha2 { code: "LC", country_name: "Saint Lucia" },
Alpha2 { code: "LI", country_name: "Liechtenstein" },
Alpha2 { code: "LK", country_name: "Sri Lanka" },
Alpha2 { code: "LR", country_name: "Liberia" },
Alpha2 { code: "LS", country_name: "Lesotho" },
Alpha2 { code: "LT", country_name: "Lithuania" },
Alpha2 { code: "LU", country_name: "Luxembourg" },
Alpha2 { code: "LV", country_name: "Latvia" },
Alpha2 { code: "LY", country_name: "Libya" },
Alpha2 { code: "MA", country_name: "Morocco" },
Alpha2 { code: "MC", country_name: "Monaco" },
Alpha2 { code: "MD", country_name: "Moldova, Republic of" },
Alpha2 { code: "ME", country_name: "Montenegro" },
Alpha2 { code: "MF", country_name: "Saint Martin (French part)" },
Alpha2 { code: "MG", country_name: "Madagascar" },
Alpha2 { code: "MH", country_name: "Marshall Islands" },
Alpha2 { code: "MK", country_name: "North Macedonia" },
Alpha2 { code: "ML", country_name: "Mali" },
Alpha2 { code: "MM", country_name: "Myanmar" },
Alpha2 { code: "MN", country_name: "Mongolia" },
Alpha2 { code: "MO", country_name: "Macao" },
Alpha2 { code: "MP", country_name: "Northern Mariana Islands" },
Alpha2 { code: "MQ", country_name: "Martinique" },
Alpha2 { code: "MR", country_name: "Mauritania" },
Alpha2 { code: "MS", country_name: "Montserrat" },
Alpha2 { code: "MT", country_name: "Malta" },
Alpha2 { code: "MU", country_name: "Mauritius" },
Alpha2 { code: "MV", country_name: "Maldives" },
Alpha2 { code: "MW", country_name: "Malawi" },
Alpha2 { code: "MX", country_name: "Mexico" },
Alpha2 { code: "MY", country_name: "Malaysia" },
Alpha2 { code: "MZ", country_name: "Mozambique" },
Alpha2 { code: "NA", country_name: "Namibia" },
Alpha2 { code: "NC", country_name: "New Caledonia" },
Alpha2 { code: "NE", country_name: "Niger" },
Alpha2 { code: "NF", country_name: "Norfolk Island" },
Alpha2 { code: "NG", country_name: "Nigeria" },
Alpha2 { code: "NI", country_name: "Nicaragua" },
Alpha2 { code: "NL", country_name: "Netherlands" },
Alpha2 { code: "NO", country_name: "Norway" },
Alpha2 { code: "NP", country_name: "Nepal" },
Alpha2 { code: "NR", country_name: "Nauru" },
Alpha2 { code: "NU", country_name: "Niue" },
Alpha2 { code: "NZ", country_name: "New Zealand" },
Alpha2 { code: "OM", country_name: "Oman" },
Alpha2 { code: "PA", country_name: "Panama" },
Alpha2 { code: "PE", country_name: "Peru" },
Alpha2 { code: "PF", country_name: "French Polynesia" },
Alpha2 { code: "PG", country_name: "Papua New Guinea" },
Alpha2 { code: "PH", country_name: "Philippines" },
Alpha2 { code: "PK", country_name: "Pakistan" },
Alpha2 { code: "PL", country_name: "Poland" },
Alpha2 { code: "PM", country_name: "Saint Pierre and Miquelon" },
Alpha2 { code: "PN", country_name: "Pitcairn" },
Alpha2 { code: "PR", country_name: "Puerto Rico" },
Alpha2 { code: "PS", country_name: "Palestine, State of" },
Alpha2 { code: "PT", country_name: "Portugal" },
Alpha2 { code: "PW", country_name: "Palau" },
Alpha2 { code: "PY", country_name: "Paraguay" },
Alpha2 { code: "QA", country_name: "Qatar" },
Alpha2 { code: "RE", country_name: "Réunion" },
Alpha2 { code: "RO", country_name: "Romania" },
Alpha2 { code: "RS", country_name: "Serbia" },
Alpha2 { code: "RU", country_name: "Russian Federation" },
Alpha2 { code: "RW", country_name: "Rwanda" },
Alpha2 { code: "SA", country_name: "Saudi Arabia" },
Alpha2 { code: "SB", country_name: "Solomon Islands" },
Alpha2 { code: "SC", country_name: "Seychelles" },
Alpha2 { code: "SD", country_name: "Sudan" },
Alpha2 { code: "SE", country_name: "Sweden" },
Alpha2 { code: "SG", country_name: "Singapore" },
Alpha2 { code: "SH", country_name: "Saint Helena, Ascension and Tristan da Cunha" },
Alpha2 { code: "SI", country_name: "Slovenia" },
Alpha2 { code: "SJ", country_name: "Svalbard and Jan Mayen" },
Alpha2 { code: "SK", country_name: "Slovakia" },
Alpha2 { code: "SL", country_name: "Sierra Leone" },
Alpha2 { code: "SM", country_name: "San Marino" },
Alpha2 { code: "SN", country_name: "Senegal" },
Alpha2 { code: "SO", country_name: "Somalia" },
Alpha2 { code: "SR", country_name: "Suriname" },
Alpha2 { code: "SS", country_name: "South Sudan" },
Alpha2 { code: "ST", country_name: "Sao Tome and Principe" },
Alpha2 { code: "SV", country_name: "El Salvador" },
Alpha2 { code: "SX", country_name: "Sint Maarten (Dutch part)" },
Alpha2 { code: "SY", country_name: "Syrian Arab Republic" },
Alpha2 { code: "SZ", country_name: "Eswatini" },
Alpha2 { code: "TC", country_name: "Turks and Caicos Islands" },
Alpha2 { code: "TD", country_name: "Chad" },
Alpha2 { code: "TF", country_name: "French Southern Territories" },
Alpha2 { code: "TG", country_name: "Togo" },
Alpha2 { code: "TH", country_name: "Thailand" },
Alpha2 { code: "TJ", country_name: "Tajikistan" },
Alpha2 { code: "TK", country_name: "Tokelau" },
Alpha2 { code: "TL", country_name: "Timor-Leste" },
Alpha2 { code: "TM", country_name: "Turkmenistan" },
Alpha2 { code: "TN", country_name: "Tunisia" },
Alpha2 { code: "TO", country_name: "Tonga" },
Alpha2 { code: "TR", country_name: "Turkey" },
Alpha2 { code: "TT", country_name: "Trinidad and Tobago" },
Alpha2 { code: "TV", country_name: "Tuvalu" },
Alpha2 { code: "TW", country_name: "Taiwan" },
Alpha2 { code: "TZ", country_name: "Tanzania, United Republic of" },
Alpha2 { code: "UA", country_name: "Ukraine" },
Alpha2 { code: "UG", country_name: "Uganda" },
Alpha2 { code: "UM", country_name: "United States Minor Outlying Islands" },
Alpha2 { code: "US", country_name: "United States of America" },
Alpha2 { code: "UY", country_name: "Uruguay" },
Alpha2 { code: "UZ", country_name: "Uzbekistan" },
Alpha2 { code: "VA", country_name: "Holy See" },
Alpha2 { code: "VC", country_name: "Saint Vincent and the Grenadines" },
Alpha2 { code: "VE", country_name: "Venezuela (Bolivarian Republic of)" },
Alpha2 { code: "VG", country_name: "Virgin Islands (British)" },
Alpha2 { code: "VI", country_name: "Virgin Islands (U.S.)" },
Alpha2 { code: "VN", country_name: "Vietnam" },
Alpha2 { code: "VU", country_name: "Vanuatu" },
Alpha2 { code: "WF", country_name: "Wallis and Futuna" },
Alpha2 { code: "WS", country_name: "Samoa" },
Alpha2 { code: "YE", country_name: "Yemen" },
Alpha2 { code: "YT", country_name: "Mayotte" },
Alpha2 { code: "ZA", country_name: "South Africa" },
Alpha2 { code: "ZM", country_name: "Zambia" },
Alpha2 { code: "ZW", country_name: "Zimbabwe" },
];
pub const ALPHA3_CODES: &[Alpha3] = &[
Alpha3 { code: "AFG", country_name: "Afghanistan" },
Alpha3 { code: "AGO", country_name: "Angola" },
Alpha3 { code: "AIA", country_name: "Anguilla" },
Alpha3 { code: "ALA", country_name: "Åland Islands" },
Alpha3 { code: "ALB", country_name: "Albania" },
Alpha3 { code: "AND", country_name: "Andorra" },
Alpha3 { code: "ARE", country_name: "United Arab Emirates" },
Alpha3 { code: "ARG", country_name: "Argentina" },
Alpha3 { code: "ARM", country_name: "Armenia" },
Alpha3 { code: "ASM", country_name: "American Samoa" },
Alpha3 { code: "ATA", country_name: "Antarctica" },
Alpha3 { code: "ATF", country_name: "French Southern Territories" },
Alpha3 { code: "ATG", country_name: "Antigua and Barbuda" },
Alpha3 { code: "AUS", country_name: "Australia" },
Alpha3 { code: "AUT", country_name: "Austria" },
Alpha3 { code: "AZE", country_name: "Azerbaijan" },
Alpha3 { code: "BDI", country_name: "Burundi" },
Alpha3 { code: "BEL", country_name: "Belgium" },
Alpha3 { code: "BEN", country_name: "Benin" },
Alpha3 { code: "BES", country_name: "Bonaire, Sint Eustatius and Saba" },
Alpha3 { code: "BFA", country_name: "Burkina Faso" },
Alpha3 { code: "BGD", country_name: "Bangladesh" },
Alpha3 { code: "BGR", country_name: "Bulgaria" },
Alpha3 { code: "BHR", country_name: "Bahrain" },
Alpha3 { code: "BHS", country_name: "Bahamas" },
Alpha3 { code: "BIH", country_name: "Bosnia and Herzegovina" },
Alpha3 { code: "BLM", country_name: "Saint Barthélemy" },
Alpha3 { code: "BLR", country_name: "Belarus" },
Alpha3 { code: "BLZ", country_name: "Belize" },
Alpha3 { code: "BMU", country_name: "Bermuda" },
Alpha3 { code: "BOL", country_name: "Bolivia (Plurinational State of)" },
Alpha3 { code: "BRA", country_name: "Brazil" },
Alpha3 { code: "BRB", country_name: "Barbados" },
Alpha3 { code: "BRN", country_name: "Brunei Darussalam" },
Alpha3 { code: "BTN", country_name: "Bhutan" },
Alpha3 { code: "BVT", country_name: "Bouvet Island" },
Alpha3 { code: "BWA", country_name: "Botswana" },
Alpha3 { code: "CAF", country_name: "Central African Republic" },
Alpha3 { code: "CAN", country_name: "Canada" },
Alpha3 { code: "CCK", country_name: "Cocos (Keeling) Islands" },
Alpha3 { code: "CHE", country_name: "Switzerland" },
Alpha3 { code: "CHL", country_name: "Chile" },
Alpha3 { code: "CHN", country_name: "China" },
Alpha3 { code: "CIV", country_name: "Côte d'Ivoire" },
Alpha3 { code: "CMR", country_name: "Cameroon" },
Alpha3 { code: "COD", country_name: "Congo, Democratic Republic of the" },
Alpha3 { code: "COG", country_name: "Congo" },
Alpha3 { code: "COK", country_name: "Cook Islands" },
Alpha3 { code: "COL", country_name: "Colombia" },
Alpha3 { code: "COM", country_name: "Comoros" },
Alpha3 { code: "CPV", country_name: "Cabo Verde" },
Alpha3 { code: "CRI", country_name: "Costa Rica" },
Alpha3 { code: "CUB", country_name: "Cuba" },
Alpha3 { code: "CUW", country_name: "Curaçao" },
Alpha3 { code: "CXR", country_name: "Christmas Island" },
Alpha3 { code: "CYM", country_name: "Cayman Islands" },
Alpha3 { code: "CYP", country_name: "Cyprus" },
Alpha3 { code: "CZE", country_name: "Czechia" },
Alpha3 { code: "DEU", country_name: "Germany" },
Alpha3 { code: "DJI", country_name: "Djibouti" },
Alpha3 { code: "DMA", country_name: "Dominica" },
Alpha3 { code: "DNK", country_name: "Denmark" },
Alpha3 { code: "DOM", country_name: "Dominican Republic" },
Alpha3 { code: "DZA", country_name: "Algeria" },
Alpha3 { code: "ECU", country_name: "Ecuador" },
Alpha3 { code: "EGY", country_name: "Egypt" },
Alpha3 { code: "ERI", country_name: "Eritrea" },
Alpha3 { code: "ESH", country_name: "Western Sahara" },
Alpha3 { code: "ESP", country_name: "Spain" },
Alpha3 { code: "EST", country_name: "Estonia" },
Alpha3 { code: "ETH", country_name: "Ethiopia" },
Alpha3 { code: "FIN", country_name: "Finland" },
Alpha3 { code: "FJI", country_name: "Fiji" },
Alpha3 { code: "FLK", country_name: "Falkland Islands (Malvinas)" },
Alpha3 { code: "FRA", country_name: "France" },
Alpha3 { code: "FRO", country_name: "Faroe Islands" },
Alpha3 { code: "FSM", country_name: "Micronesia (Federated States of)" },
Alpha3 { code: "GAB", country_name: "Gabon" },
Alpha3 { code: "GBR", country_name: "United Kingdom of Great Britain and Northern Ireland" },
Alpha3 { code: "GEO", country_name: "Georgia" },
Alpha3 { code: "GGY", country_name: "Guernsey" },
Alpha3 { code: "GHA", country_name: "Ghana" },
Alpha3 { code: "GIB", country_name: "Gibraltar" },
Alpha3 { code: "GIN", country_name: "Guinea" },
Alpha3 { code: "GLP", country_name: "Guadeloupe" },
Alpha3 { code: "GMB", country_name: "Gambia" },
Alpha3 { code: "GNB", country_name: "Guinea-Bissau" },
Alpha3 { code: "GNQ", country_name: "Equatorial Guinea" },
Alpha3 { code: "GRC", country_name: "Greece" },
Alpha3 { code: "GRD", country_name: "Grenada" },
Alpha3 { code: "GRL", country_name: "Greenland" },
Alpha3 { code: "GTM", country_name: "Guatemala" },
Alpha3 { code: "GUF", country_name: "French Guiana" },
Alpha3 { code: "GUM", country_name: "Guam" },
Alpha3 { code: "GUY", country_name: "Guyana" },
Alpha3 { code: "HKG", country_name: "Hong Kong" },
Alpha3 { code: "HMD", country_name: "Heard Island and McDonald Islands" },
Alpha3 { code: "HND", country_name: "Honduras" },
Alpha3 { code: "HRV", country_name: "Croatia" },
Alpha3 { code: "HTI", country_name: "Haiti" },
Alpha3 { code: "HUN", country_name: "Hungary" },
Alpha3 { code: "IDN", country_name: "Indonesia" },
Alpha3 { code: "IMN", country_name: "Isle of Man" },
Alpha3 { code: "IND", country_name: "India" },
Alpha3 { code: "IOT", country_name: "British Indian Ocean Territory" },
Alpha3 { code: "IRL", country_name: "Ireland" },
Alpha3 { code: "IRN", country_name: "Iran (Islamic Republic of)" },
Alpha3 { code: "IRQ", country_name: "Iraq" },
Alpha3 { code: "ISL", country_name: "Iceland" },
Alpha3 { code: "ISR", country_name: "Israel" },
Alpha3 { code: "ITA", country_name: "Italy" },
Alpha3 { code: "JAM", country_name: "Jamaica" },
Alpha3 { code: "JEY", country_name: "Jersey" },
Alpha3 { code: "JOR", country_name: "Jordan" },
Alpha3 { code: "JPN", country_name: "Japan" },
Alpha3 { code: "KAZ", country_name: "Kazakhstan" },
Alpha3 { code: "KEN", country_name: "Kenya" },
Alpha3 { code: "KGZ", country_name: "Kyrgyzstan" },
Alpha3 { code: "KHM", country_name: "Cambodia" },
Alpha3 { code: "KIR", country_name: "Kiribati" },
Alpha3 { code: "KNA", country_name: "Saint Kitts and Nevis" },
Alpha3 { code: "KOR", country_name: "Korea, Republic of" },
Alpha3 { code: "KWT", country_name: "Kuwait" },
Alpha3 { code: "LAO", country_name: "Lao People's Democratic Republic" },
Alpha3 { code: "LBN", country_name: "Lebanon" },
Alpha3 { code: "LBR", country_name: "Liberia" },
Alpha3 { code: "LBY", country_name: "Libya" },
Alpha3 { code: "LCA", country_name: "Saint Lucia" },
Alpha3 { code: "LIE", country_name: "Liechtenstein" },
Alpha3 { code: "LKA", country_name: "Sri Lanka" },
Alpha3 { code: "LSO", country_name: "Lesotho" },
Alpha3 { code: "LTU", country_name: "Lithuania" },
Alpha3 { code: "LUX", country_name: "Luxembourg" },
Alpha3 { code: "LVA", country_name: "Latvia" },
Alpha3 { code: "MAC", country_name: "Macao" },
Alpha3 { code: "MAF", country_name: "Saint Martin (French part)" },
Alpha3 { code: "MAR", country_name: "Morocco" },
Alpha3 { code: "MCO", country_name: "Monaco" },
Alpha3 { code: "MDA", country_name: "Moldova, Republic of" },
Alpha3 { code: "MDG", country_name: "Madagascar" },
Alpha3 { code: "MDV", country_name: "Maldives" },
Alpha3 { code: "MEX", country_name: "Mexico" },
Alpha3 { code: "MHL", country_name: "Marshall Islands" },
Alpha3 { code: "MKD", country_name: "North Macedonia" },
Alpha3 { code: "MLI", country_name: "Mali" },
Alpha3 { code: "MLT", country_name: "Malta" },
Alpha3 { code: "MMR", country_name: "Myanmar" },
Alpha3 { code: "MNE", country_name: "Montenegro" },
Alpha3 { code: "MNG", country_name: "Mongolia" },
Alpha3 { code: "MNP", country_name: "Northern Mariana Islands" },
Alpha3 { code: "MOZ", country_name: "Mozambique" },
Alpha3 { code: "MRT", country_name: "Mauritania" },
Alpha3 { code: "MSR", country_name: "Montserrat" },
Alpha3 { code: "MTQ", country_name: "Martinique" },
Alpha3 { code: "MUS", country_name: "Mauritius" },
Alpha3 { code: "MWI", country_name: "Malawi" },
Alpha3 { code: "MYS", country_name: "Malaysia" },
Alpha3 { code: "MYT", country_name: "Mayotte" },
Alpha3 { code: "NAM", country_name: "Namibia" },
Alpha3 { code: "NCL", country_name: "New Caledonia" },
Alpha3 { code: "NER", country_name: "Niger" },
Alpha3 { code: "NFK", country_name: "Norfolk Island" },
Alpha3 { code: "NGA", country_name: "Nigeria" },
Alpha3 { code: "NIC", country_name: "Nicaragua" },
Alpha3 { code: "NIU", country_name: "Niue" },
Alpha3 { code: "NLD", country_name: "Netherlands" },
Alpha3 { code: "NOR", country_name: "Norway" },
Alpha3 { code: "NPL", country_name: "Nepal" },
Alpha3 { code: "NRU", country_name: "Nauru" },
Alpha3 { code: "NZL", country_name: "New Zealand" },
Alpha3 { code: "OMN", country_name: "Oman" },
Alpha3 { code: "PAK", country_name: "Pakistan" },
Alpha3 { code: "PAN", country_name: "Panama" },
Alpha3 { code: "PCN", country_name: "Pitcairn" },
Alpha3 { code: "PER", country_name: "Peru" },
Alpha3 { code: "PHL", country_name: "Philippines" },
Alpha3 { code: "PLW", country_name: "Palau" },
Alpha3 { code: "PNG", country_name: "Papua New Guinea" },
Alpha3 { code: "POL", country_name: "Poland" },
Alpha3 { code: "PRI", country_name: "Puerto Rico" },
Alpha3 { code: "PRK", country_name: "Korea (Democratic People's Republic of)" },
Alpha3 { code: "PRT", country_name: "Portugal" },
Alpha3 { code: "PRY", country_name: "Paraguay" },
Alpha3 { code: "PSE", country_name: "Palestine, State of" },
Alpha3 { code: "PYF", country_name: "French Polynesia" },
Alpha3 { code: "QAT", country_name: "Qatar" },
Alpha3 { code: "REU", country_name: "Réunion" },
Alpha3 { code: "ROU", country_name: "Romania" },
Alpha3 { code: "RUS", country_name: "Russian Federation" },
Alpha3 { code: "RWA", country_name: "Rwanda" },
Alpha3 { code: "SAU", country_name: "Saudi Arabia" },
Alpha3 { code: "SDN", country_name: "Sudan" },
Alpha3 { code: "SEN", country_name: "Senegal" },
Alpha3 { code: "SGP", country_name: "Singapore" },
Alpha3 { code: "SGS", country_name: "South Georgia and the South Sandwich Islands" },
Alpha3 { code: "SHN", country_name: "Saint Helena, Ascension and Tristan da Cunha" },
Alpha3 { code: "SJM", country_name: "Svalbard and Jan Mayen" },
Alpha3 { code: "SLB", country_name: "Solomon Islands" },
Alpha3 { code: "SLE", country_name: "Sierra Leone" },
Alpha3 { code: "SLV", country_name: "El Salvador" },
Alpha3 { code: "SMR", country_name: "San Marino" },
Alpha3 { code: "SOM", country_name: "Somalia" },
Alpha3 { code: "SPM", country_name: "Saint Pierre and Miquelon" },
Alpha3 { code: "SRB", country_name: "Serbia" },
Alpha3 { code: "SSD", country_name: "South Sudan" },
Alpha3 { code: "STP", country_name: "Sao Tome and Principe" },
Alpha3 { code: "SUR", country_name: "Suriname" },
Alpha3 { code: "SVK", country_name: "Slovakia" },
Alpha3 { code: "SVN", country_name: "Slovenia" },
Alpha3 { code: "SWE", country_name: "Sweden" },
Alpha3 { code: "SWZ", country_name: "Eswatini" },
Alpha3 { code: "SXM", country_name: "Sint Maarten (Dutch part)" },
Alpha3 { code: "SYC", country_name: "Seychelles" },
Alpha3 { code: "SYR", country_name: "Syrian Arab Republic" },
Alpha3 { code: "TCA", country_name: "Turks and Caicos Islands" },
Alpha3 { code: "TCD", country_name: "Chad" },
Alpha3 { code: "TGO", country_name: "Togo" },
Alpha3 { code: "THA", country_name: "Thailand" },
Alpha3 { code: "TJK", country_name: "Tajikistan" },
Alpha3 { code: "TKL", country_name: "Tokelau" },
Alpha3 { code: "TKM", country_name: "Turkmenistan" },
Alpha3 { code: "TLS", country_name: "Timor-Leste" },
Alpha3 { code: "TON", country_name: "Tonga" },
Alpha3 { code: "TTO", country_name: "Trinidad and Tobago" },
Alpha3 { code: "TUN", country_name: "Tunisia" },
Alpha3 { code: "TUR", country_name: "Turkey" },
Alpha3 { code: "TUV", country_name: "Tuvalu" },
Alpha3 { code: "TWN", country_name: "Taiwan, Province of China" },
Alpha3 { code: "TZA", country_name: "Tanzania, United Republic of" },
Alpha3 { code: "UGA", country_name: "Uganda" },
Alpha3 { code: "UKR", country_name: "Ukraine" },
Alpha3 { code: "UMI", country_name: "United States Minor Outlying Islands" },
Alpha3 { code: "URY", country_name: "Uruguay" },
Alpha3 { code: "USA", country_name: "United States of America" },
Alpha3 { code: "UZB", country_name: "Uzbekistan" },
Alpha3 { code: "VAT", country_name: "Holy See" },
Alpha3 { code: "VCT", country_name: "Saint Vincent and the Grenadines" },
Alpha3 { code: "VEN", country_name: "Venezuela (Bolivarian Republic of)" },
Alpha3 { code: "VGB", country_name: "Virgin Islands (British)" },
Alpha3 { code: "VIR", country_name: "Virgin Islands (U.S.)" },
Alpha3 { code: "VNM", country_name: "Vietnam" },
Alpha3 { code: "VUT", country_name: "Vanuatu" },
Alpha3 { code: "WLF", country_name: "Wallis and Futuna" },
Alpha3 { code: "WSM", country_name: "Samoa" },
Alpha3 { code: "YEM", country_name: "Yemen" },
Alpha3 { code: "ZAF", country_name: "South Africa" },
Alpha3 { code: "ZMB", country_name: "Zambia" },
Alpha3 { code: "ZWE", country_name: "Zimbabwe" },
];
pub const NUMERIC_CODES: &[Numeric] = &[
Numeric { code: "004", country_name: "Afghanistan" },
Numeric { code: "008", country_name: "Albania" },
Numeric { code: "010", country_name: "Antarctica" },
Numeric { code: "012", country_name: "Algeria" },
Numeric { code: "016", country_name: "American Samoa" },
Numeric { code: "020", country_name: "Andorra" },
Numeric { code: "024", country_name: "Angola" },
Numeric { code: "028", country_name: "Antigua and Barbuda" },
Numeric { code: "031", country_name: "Azerbaijan" },
Numeric { code: "032", country_name: "Argentina" },
Numeric { code: "036", country_name: "Australia" },
Numeric { code: "040", country_name: "Austria" },
Numeric { code: "044", country_name: "Bahamas" },
Numeric { code: "048", country_name: "Bahrain" },
Numeric { code: "050", country_name: "Bangladesh" },
Numeric { code: "051", country_name: "Armenia" },
Numeric { code: "052", country_name: "Barbados" },
Numeric { code: "056", country_name: "Belgium" },
Numeric { code: "060", country_name: "Bermuda" },
Numeric { code: "064", country_name: "Bhutan" },
Numeric { code: "068", country_name: "Bolivia (Plurinational State of)" },
Numeric { code: "070", country_name: "Bosnia and Herzegovina" },
Numeric { code: "072", country_name: "Botswana" },
Numeric { code: "074", country_name: "Bouvet Island" },
Numeric { code: "076", country_name: "Brazil" },
Numeric { code: "084", country_name: "Belize" },
Numeric { code: "086", country_name: "British Indian Ocean Territory" },
Numeric { code: "090", country_name: "Solomon Islands" },
Numeric { code: "092", country_name: "Virgin Islands (British)" },
Numeric { code: "096", country_name: "Brunei Darussalam" },
Numeric { code: "100", country_name: "Bulgaria" },
Numeric { code: "104", country_name: "Myanmar" },
Numeric { code: "108", country_name: "Burundi" },
Numeric { code: "112", country_name: "Belarus" },
Numeric { code: "116", country_name: "Cambodia" },
Numeric { code: "120", country_name: "Cameroon" },
Numeric { code: "124", country_name: "Canada" },
Numeric { code: "132", country_name: "Cabo Verde" },
Numeric { code: "136", country_name: "Cayman Islands" },
Numeric { code: "140", country_name: "Central African Republic" },
Numeric { code: "144", country_name: "Sri Lanka" },
Numeric { code: "148", country_name: "Chad" },
Numeric { code: "152", country_name: "Chile" },
Numeric { code: "156", country_name: "China" },
Numeric { code: "158", country_name: "Taiwan, Province of China" },
Numeric { code: "162", country_name: "Christmas Island" },
Numeric { code: "166", country_name: "Cocos (Keeling) Islands" },
Numeric { code: "170", country_name: "Colombia" },
Numeric { code: "174", country_name: "Comoros" },
Numeric { code: "175", country_name: "Mayotte" },
Numeric { code: "178", country_name: "Congo" },
Numeric { code: "180", country_name: "Congo, Democratic Republic of the" },
Numeric { code: "184", country_name: "Cook Islands" },
Numeric { code: "188", country_name: "Costa Rica" },
Numeric { code: "191", country_name: "Croatia" },
Numeric { code: "192", country_name: "Cuba" },
Numeric { code: "196", country_name: "Cyprus" },
Numeric { code: "203", country_name: "Czechia" },
Numeric { code: "204", country_name: "Benin" },
Numeric { code: "208", country_name: "Denmark" },
Numeric { code: "212", country_name: "Dominica" },
Numeric { code: "214", country_name: "Dominican Republic" },
Numeric { code: "218", country_name: "Ecuador" },
Numeric { code: "222", country_name: "El Salvador" },
Numeric { code: "226", country_name: "Equatorial Guinea" },
Numeric { code: "231", country_name: "Ethiopia" },
Numeric { code: "232", country_name: "Eritrea" },
Numeric { code: "233", country_name: "Estonia" },
Numeric { code: "234", country_name: "Faroe Islands" },
Numeric { code: "238", country_name: "Falkland Islands (Malvinas)" },
Numeric { code: "239", country_name: "South Georgia and the South Sandwich Islands" },
Numeric { code: "242", country_name: "Fiji" },
Numeric { code: "246", country_name: "Finland" },
Numeric { code: "248", country_name: "Åland Islands" },
Numeric { code: "250", country_name: "France" },
Numeric { code: "254", country_name: "French Guiana" },
Numeric { code: "258", country_name: "French Polynesia" },
Numeric { code: "260", country_name: "French Southern Territories" },
Numeric { code: "262", country_name: "Djibouti" },
Numeric { code: "266", country_name: "Gabon" },
Numeric { code: "268", country_name: "Georgia" },
Numeric { code: "270", country_name: "Gambia" },
Numeric { code: "275", country_name: "Palestine, State of" },
Numeric { code: "276", country_name: "Germany" },
Numeric { code: "288", country_name: "Ghana" },
Numeric { code: "292", country_name: "Gibraltar" },
Numeric { code: "296", country_name: "Kiribati" },
Numeric { code: "300", country_name: "Greece" },
Numeric { code: "304", country_name: "Greenland" },
Numeric { code: "308", country_name: "Grenada" },
Numeric { code: "312", country_name: "Guadeloupe" },
Numeric { code: "316", country_name: "Guam" },
Numeric { code: "320", country_name: "Guatemala" },
Numeric { code: "324", country_name: "Guinea" },
Numeric { code: "328", country_name: "Guyana" },
Numeric { code: "332", country_name: "Haiti" },
Numeric { code: "334", country_name: "Heard Island and McDonald Islands" },
Numeric { code: "336", country_name: "Holy See" },
Numeric { code: "340", country_name: "Honduras" },
Numeric { code: "344", country_name: "Hong Kong" },
Numeric { code: "348", country_name: "Hungary" },
Numeric { code: "352", country_name: "Iceland" },
Numeric { code: "356", country_name: "India" },
Numeric { code: "360", country_name: "Indonesia" },
Numeric { code: "364", country_name: "Iran (Islamic Republic of)" },
Numeric { code: "368", country_name: "Iraq" },
Numeric { code: "372", country_name: "Ireland" },
Numeric { code: "376", country_name: "Israel" },
Numeric { code: "380", country_name: "Italy" },
Numeric { code: "384", country_name: "Côte d\'Ivoire" },
Numeric { code: "388", country_name: "Jamaica" },
Numeric { code: "392", country_name: "Japan" },
Numeric { code: "398", country_name: "Kazakhstan" },
Numeric { code: "400", country_name: "Jordan" },
Numeric { code: "404", country_name: "Kenya" },
Numeric { code: "408", country_name: "Korea (Democratic People\'s Republic of)" },
Numeric { code: "410", country_name: "Korea, Republic of" },
Numeric { code: "414", country_name: "Kuwait" },
Numeric { code: "417", country_name: "Kyrgyzstan" },
Numeric { code: "418", country_name: "Lao People\'s Democratic Republic" },
Numeric { code: "422", country_name: "Lebanon" },
Numeric { code: "426", country_name: "Lesotho" },
Numeric { code: "428", country_name: "Latvia" },
Numeric { code: "430", country_name: "Liberia" },
Numeric { code: "434", country_name: "Libya" },
Numeric { code: "438", country_name: "Liechtenstein" },
Numeric { code: "440", country_name: "Lithuania" },
Numeric { code: "442", country_name: "Luxembourg" },
Numeric { code: "446", country_name: "Macao" },
Numeric { code: "450", country_name: "Madagascar" },
Numeric { code: "454", country_name: "Malawi" },
Numeric { code: "458", country_name: "Malaysia" },
Numeric { code: "462", country_name: "Maldives" },
Numeric { code: "466", country_name: "Mali" },
Numeric { code: "470", country_name: "Malta" },
Numeric { code: "474", country_name: "Martinique" },
Numeric { code: "478", country_name: "Mauritania" },
Numeric { code: "480", country_name: "Mauritius" },
Numeric { code: "484", country_name: "Mexico" },
Numeric { code: "492", country_name: "Monaco" },
Numeric { code: "496", country_name: "Mongolia" },
Numeric { code: "498", country_name: "Moldova, Republic of" },
Numeric { code: "499", country_name: "Montenegro" },
Numeric { code: "500", country_name: "Montserrat" },
Numeric { code: "504", country_name: "Morocco" },
Numeric { code: "508", country_name: "Mozambique" },
Numeric { code: "512", country_name: "Oman" },
Numeric { code: "516", country_name: "Namibia" },
Numeric { code: "520", country_name: "Nauru" },
Numeric { code: "524", country_name: "Nepal" },
Numeric { code: "528", country_name: "Netherlands" },
Numeric { code: "531", country_name: "Curaçao" },
Numeric { code: "533", country_name: "Aruba" },
Numeric { code: "534", country_name: "Sint Maarten (Dutch part)" },
Numeric { code: "535", country_name: "Bonaire, Sint Eustatius and Saba" },
Numeric { code: "540", country_name: "New Caledonia" },
Numeric { code: "548", country_name: "Vanuatu" },
Numeric { code: "554", country_name: "New Zealand" },
Numeric { code: "558", country_name: "Nicaragua" },
Numeric { code: "562", country_name: "Niger" },
Numeric { code: "566", country_name: "Nigeria" },
Numeric { code: "570", country_name: "Niue" },
Numeric { code: "574", country_name: "Norfolk Island" },
Numeric { code: "578", country_name: "Norway" },
Numeric { code: "580", country_name: "Northern Mariana Islands" },
Numeric { code: "581", country_name: "United States Minor Outlying Islands" },
Numeric { code: "583", country_name: "Micronesia (Federated States of)" },
Numeric { code: "584", country_name: "Marshall Islands" },
Numeric { code: "585", country_name: "Palau" },
Numeric { code: "586", country_name: "Pakistan" },
Numeric { code: "591", country_name: "Panama" },
Numeric { code: "598", country_name: "Papua New Guinea" },
Numeric { code: "600", country_name: "Paraguay" },
Numeric { code: "604", country_name: "Peru" },
Numeric { code: "608", country_name: "Philippines" },
Numeric { code: "612", country_name: "Pitcairn" },
Numeric { code: "616", country_name: "Poland" },
Numeric { code: "620", country_name: "Portugal" },
Numeric { code: "624", country_name: "Guinea-Bissau" },
Numeric { code: "626", country_name: "Timor-Leste" },
Numeric { code: "630", country_name: "Puerto Rico" },
Numeric { code: "634", country_name: "Qatar" },
Numeric { code: "638", country_name: "Réunion" },
Numeric { code: "642", country_name: "Romania" },
Numeric { code: "643", country_name: "Russian Federation" },
Numeric { code: "646", country_name: "Rwanda" },
Numeric { code: "652", country_name: "Saint Barthélemy" },
Numeric { code: "654", country_name: "Saint Helena, Ascension and Tristan da Cunha" },
Numeric { code: "659", country_name: "Saint Kitts and Nevis" },
Numeric { code: "660", country_name: "Anguilla" },
Numeric { code: "662", country_name: "Saint Lucia" },
Numeric { code: "663", country_name: "Saint Martin (French part)" },
Numeric { code: "666", country_name: "Saint Pierre and Miquelon" },
Numeric { code: "670", country_name: "Saint Vincent and the Grenadines" },
Numeric { code: "674", country_name: "San Marino" },
Numeric { code: "678", country_name: "Sao Tome and Principe" },
Numeric { code: "682", country_name: "Saudi Arabia" },
Numeric { code: "686", country_name: "Senegal" },
Numeric { code: "688", country_name: "Serbia" },
Numeric { code: "690", country_name: "Seychelles" },
Numeric { code: "694", country_name: "Sierra Leone" },
Numeric { code: "702", country_name: "Singapore" },
Numeric { code: "703", country_name: "Slovakia" },
Numeric { code: "704", country_name: "Vietnam" },
Numeric { code: "705", country_name: "Slovenia" },
Numeric { code: "706", country_name: "Somalia" },
Numeric { code: "710", country_name: "South Africa" },
Numeric { code: "716", country_name: "Zimbabwe" },
Numeric { code: "724", country_name: "Spain" },
Numeric { code: "728", country_name: "South Sudan" },
Numeric { code: "729", country_name: "Sudan" },
Numeric { code: "732", country_name: "Western Sahara" },
Numeric { code: "740", country_name: "Suriname" },
Numeric { code: "744", country_name: "Svalbard and Jan Mayen" },
Numeric { code: "748", country_name: "Eswatini" },
Numeric { code: "752", country_name: "Sweden" },
Numeric { code: "756", country_name: "Switzerland" },
Numeric { code: "760", country_name: "Syrian Arab Republic" },
Numeric { code: "762", country_name: "Tajikistan" },
Numeric { code: "764", country_name: "Thailand" },
Numeric { code: "768", country_name: "Togo" },
Numeric { code: "772", country_name: "Tokelau" },
Numeric { code: "776", country_name: "Tonga" },
Numeric { code: "780", country_name: "Trinidad and Tobago" },
Numeric { code: "784", country_name: "United Arab Emirates" },
Numeric { code: "788", country_name: "Tunisia" },
Numeric { code: "792", country_name: "Turkey" },
Numeric { code: "795", country_name: "Turkmenistan" },
Numeric { code: "796", country_name: "Turks and Caicos Islands" },
Numeric { code: "798", country_name: "Tuvalu" },
Numeric { code: "800", country_name: "Uganda" },
Numeric { code: "804", country_name: "Ukraine" },
Numeric { code: "807", country_name: "North Macedonia" },
Numeric { code: "818", country_name: "Egypt" },
Numeric { code: "826", country_name: "United Kingdom of Great Britain and Northern Ireland" },
Numeric { code: "831", country_name: "Guernsey" },
Numeric { code: "832", country_name: "Jersey" },
Numeric { code: "833", country_name: "Isle of Man" },
Numeric { code: "834", country_name: "Tanzania, United Republic of" },
Numeric { code: "840", country_name: "United States of America" },
Numeric { code: "850", country_name: "Virgin Islands (U.S.)" },
Numeric { code: "854", country_name: "Burkina Faso" },
Numeric { code: "858", country_name: "Uruguay" },
Numeric { code: "860", country_name: "Uzbekistan" },
Numeric { code: "862", country_name: "Venezuela (Bolivarian Republic of)" },
Numeric { code: "876", country_name: "Wallis and Futuna" },
Numeric { code: "882", country_name: "Samoa" },
Numeric { code: "887", country_name: "Yemen" },
Numeric { code: "894", country_name: "Zambia" },
];
#[derive(Debug, Eq)]
pub struct Alpha2<'a> {
code: &'a str,
country_name: &'a str,
}
impl<'a> Alpha2<'a> {
pub fn make(code: &'a str, country_name: &'a str) -> io::Result<Self> {
let bytes = code.as_bytes();
if bytes.len() != 2 || bytes.into_iter().any(|b| b < &b'A' || b > &b'Z') {
return Err(Error::new(ErrorKind::InvalidInput, format!("Invalid ISO 3166-1 Alpha-2 code: {:?}", code)));
}
Ok(Self { code, country_name })
}
pub const fn code(&self) -> &str {
self.code
}
pub const fn country_name(&self) -> &str {
self.country_name
}
}
impl PartialEq for Alpha2<'_> {
fn eq(&self, other: &Self) -> bool {
self.code.eq_ignore_ascii_case(other.code)
}
}
impl Ord for Alpha2<'_> {
fn cmp(&self, other: &Self) -> Ordering {
self.code.cmp(other.code)
}
}
impl PartialOrd for Alpha2<'_> {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}
impl Hash for Alpha2<'_> {
fn hash<H>(&self, h: &mut H) where H: Hasher {
self.code.hash(h);
}
}
impl fmt::Display for Alpha2<'_> {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
f.write_str(self.code)
}
}
#[derive(Debug, Eq)]
pub struct Alpha3<'a> {
code: &'a str,
country_name: &'a str,
}
impl<'a> Alpha3<'a> {
pub fn make(code: &'a str, country_name: &'a str) -> io::Result<Self> {
let bytes = code.as_bytes();
if bytes.len() != 3 || bytes.into_iter().any(|b| b < &b'A' || b > &b'Z') {
return Err(Error::new(ErrorKind::InvalidInput, format!("Invalid ISO 3166-1 Alpha-3 code: {:?}", code)));
}
Ok(Self { code, country_name })
}
pub const fn code(&self) -> &str {
self.code
}
pub const fn country_name(&self) -> &str {
self.country_name
}
}
impl PartialEq for Alpha3<'_> {
fn eq(&self, other: &Self) -> bool {
self.code.eq_ignore_ascii_case(other.code)
}
}
impl Ord for Alpha3<'_> {
fn cmp(&self, other: &Self) -> Ordering {
self.code.cmp(other.code)
}
}
impl PartialOrd for Alpha3<'_> {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}
impl Hash for Alpha3<'_> {
fn hash<H>(&self, h: &mut H) where H: Hasher {
self.code.hash(h);
}
}
impl fmt::Display for Alpha3<'_> {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
f.write_str(self.code)
}
}
#[derive(Debug, Eq)]
pub struct Numeric<'a> {
code: &'a str,
country_name: &'a str,
}
impl<'a> Numeric<'a> {
pub fn make(code: &'a str, country_name: &'a str) -> io::Result<Self> {
let bytes = code.as_bytes();
if bytes.len() != 3 || bytes.into_iter().any(|b| b < &b'0' || b > &b'9') {
return Err(Error::new(ErrorKind::InvalidInput, format!("Invalid ISO 3166-1 Numeric code: {:?}", code)));
}
Ok(Self { code, country_name })
}
pub const fn code(&self) -> &str {
self.code
}
pub const fn country_name(&self) -> &str {
self.country_name
}
}
impl PartialEq for Numeric<'_> {
fn eq(&self, other: &Self) -> bool {
self.code.eq(other.code)
}
}
impl Ord for Numeric<'_> {
fn cmp(&self, other: &Self) -> Ordering {
self.code.cmp(other.code)
}
}
impl PartialOrd for Numeric<'_> {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}
impl Hash for Numeric<'_> {
fn hash<H>(&self, h: &mut H) where H: Hasher {
self.code.hash(h);
}
}
impl fmt::Display for Numeric<'_> {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
f.write_str(self.code)
}
}