defter 0.3.9

Self-hosted Zotero sync and file storage server, with metadata in SQLite and attachments in S3.
//! Country names by ISO 3166 code, in English and German, for the public
//! profile. commonmeta.org gets them from the browser's `Intl.DisplayNames`;
//! this page is rendered on the server, so they were generated from the same
//! data (CLDR).

use crate::i18n::Lang;

/// The name of the country with this code, if it is one.
pub fn name(code: &str, lang: Lang) -> Option<&'static str> {
    let at = COUNTRIES.binary_search_by_key(&code, |c| c.0).ok()?;
    Some(match lang {
        Lang::En => COUNTRIES[at].1,
        Lang::De => COUNTRIES[at].2,
    })
}

/// Sorted by code.
#[rustfmt::skip]
const COUNTRIES: &[(&str, &str, &str)] = &[
    ("AD", "Andorra", "Andorra"),
    ("AE", "United Arab Emirates", "Vereinigte Arabische Emirate"),
    ("AF", "Afghanistan", "Afghanistan"),
    ("AG", "Antigua & Barbuda", "Antigua und Barbuda"),
    ("AI", "Anguilla", "Anguilla"),
    ("AL", "Albania", "Albanien"),
    ("AM", "Armenia", "Armenien"),
    ("AN", "Curaçao", "Curaçao"),
    ("AO", "Angola", "Angola"),
    ("AQ", "Antarctica", "Antarktis"),
    ("AR", "Argentina", "Argentinien"),
    ("AS", "American Samoa", "Amerikanisch-Samoa"),
    ("AT", "Austria", "Österreich"),
    ("AU", "Australia", "Australien"),
    ("AW", "Aruba", "Aruba"),
    ("AX", "Åland Islands", "Ålandinseln"),
    ("AZ", "Azerbaijan", "Aserbaidschan"),
    ("BA", "Bosnia & Herzegovina", "Bosnien und Herzegowina"),
    ("BB", "Barbados", "Barbados"),
    ("BD", "Bangladesh", "Bangladesch"),
    ("BE", "Belgium", "Belgien"),
    ("BF", "Burkina Faso", "Burkina Faso"),
    ("BG", "Bulgaria", "Bulgarien"),
    ("BH", "Bahrain", "Bahrain"),
    ("BI", "Burundi", "Burundi"),
    ("BJ", "Benin", "Benin"),
    ("BL", "St. Barthélemy", "St. Barthélemy"),
    ("BM", "Bermuda", "Bermuda"),
    ("BN", "Brunei", "Brunei Darussalam"),
    ("BO", "Bolivia", "Bolivien"),
    ("BQ", "Caribbean Netherlands", "Karibische Niederlande"),
    ("BR", "Brazil", "Brasilien"),
    ("BS", "Bahamas", "Bahamas"),
    ("BT", "Bhutan", "Bhutan"),
    ("BU", "Myanmar (Burma)", "Myanmar"),
    ("BV", "Bouvet Island", "Bouvetinsel"),
    ("BW", "Botswana", "Botsuana"),
    ("BY", "Belarus", "Belarus"),
    ("BZ", "Belize", "Belize"),
    ("CA", "Canada", "Kanada"),
    ("CC", "Cocos (Keeling) Islands", "Kokosinseln"),
    ("CD", "Congo - Kinshasa", "Kongo-Kinshasa"),
    ("CF", "Central African Republic", "Zentralafrikanische Republik"),
    ("CG", "Congo - Brazzaville", "Kongo-Brazzaville"),
    ("CH", "Switzerland", "Schweiz"),
    ("CI", "Côte d’Ivoire", "Côte d’Ivoire"),
    ("CK", "Cook Islands", "Cookinseln"),
    ("CL", "Chile", "Chile"),
    ("CM", "Cameroon", "Kamerun"),
    ("CN", "China", "China"),
    ("CO", "Colombia", "Kolumbien"),
    ("CR", "Costa Rica", "Costa Rica"),
    ("CS", "Serbia", "Serbien"),
    ("CU", "Cuba", "Kuba"),
    ("CV", "Cape Verde", "Cabo Verde"),
    ("CW", "Curaçao", "Curaçao"),
    ("CX", "Christmas Island", "Weihnachtsinsel"),
    ("CY", "Cyprus", "Zypern"),
    ("CZ", "Czechia", "Tschechien"),
    ("DD", "Germany", "Deutschland"),
    ("DE", "Germany", "Deutschland"),
    ("DJ", "Djibouti", "Dschibuti"),
    ("DK", "Denmark", "Dänemark"),
    ("DM", "Dominica", "Dominica"),
    ("DO", "Dominican Republic", "Dominikanische Republik"),
    ("DY", "Benin", "Benin"),
    ("DZ", "Algeria", "Algerien"),
    ("EC", "Ecuador", "Ecuador"),
    ("EE", "Estonia", "Estland"),
    ("EG", "Egypt", "Ägypten"),
    ("EH", "Western Sahara", "Westsahara"),
    ("ER", "Eritrea", "Eritrea"),
    ("ES", "Spain", "Spanien"),
    ("ET", "Ethiopia", "Äthiopien"),
    ("FI", "Finland", "Finnland"),
    ("FJ", "Fiji", "Fidschi"),
    ("FK", "Falkland Islands", "Falklandinseln"),
    ("FM", "Micronesia", "Mikronesien"),
    ("FO", "Faroe Islands", "Färöer"),
    ("FR", "France", "Frankreich"),
    ("FX", "France", "Frankreich"),
    ("GA", "Gabon", "Gabun"),
    ("GB", "United Kingdom", "Vereinigtes Königreich"),
    ("GD", "Grenada", "Grenada"),
    ("GE", "Georgia", "Georgien"),
    ("GF", "French Guiana", "Französisch-Guayana"),
    ("GG", "Guernsey", "Guernsey"),
    ("GH", "Ghana", "Ghana"),
    ("GI", "Gibraltar", "Gibraltar"),
    ("GL", "Greenland", "Grönland"),
    ("GM", "Gambia", "Gambia"),
    ("GN", "Guinea", "Guinea"),
    ("GP", "Guadeloupe", "Guadeloupe"),
    ("GQ", "Equatorial Guinea", "Äquatorialguinea"),
    ("GR", "Greece", "Griechenland"),
    ("GS", "South Georgia & South Sandwich Islands", "Südgeorgien und die Südlichen Sandwichinseln"),
    ("GT", "Guatemala", "Guatemala"),
    ("GU", "Guam", "Guam"),
    ("GW", "Guinea-Bissau", "Guinea-Bissau"),
    ("GY", "Guyana", "Guyana"),
    ("HK", "Hong Kong SAR China", "Sonderverwaltungsregion Hongkong"),
    ("HM", "Heard Island & McDonald Islands", "Heard und McDonaldinseln"),
    ("HN", "Honduras", "Honduras"),
    ("HR", "Croatia", "Kroatien"),
    ("HT", "Haiti", "Haiti"),
    ("HU", "Hungary", "Ungarn"),
    ("HV", "Burkina Faso", "Burkina Faso"),
    ("ID", "Indonesia", "Indonesien"),
    ("IE", "Ireland", "Irland"),
    ("IL", "Israel", "Israel"),
    ("IM", "Isle of Man", "Isle of Man"),
    ("IN", "India", "Indien"),
    ("IO", "British Indian Ocean Territory", "Britisches Territorium im Indischen Ozean"),
    ("IQ", "Iraq", "Irak"),
    ("IR", "Iran", "Iran"),
    ("IS", "Iceland", "Island"),
    ("IT", "Italy", "Italien"),
    ("JE", "Jersey", "Jersey"),
    ("JM", "Jamaica", "Jamaika"),
    ("JO", "Jordan", "Jordanien"),
    ("JP", "Japan", "Japan"),
    ("KE", "Kenya", "Kenia"),
    ("KG", "Kyrgyzstan", "Kirgisistan"),
    ("KH", "Cambodia", "Kambodscha"),
    ("KI", "Kiribati", "Kiribati"),
    ("KM", "Comoros", "Komoren"),
    ("KN", "St. Kitts & Nevis", "St. Kitts und Nevis"),
    ("KP", "North Korea", "Nordkorea"),
    ("KR", "South Korea", "Südkorea"),
    ("KW", "Kuwait", "Kuwait"),
    ("KY", "Cayman Islands", "Kaimaninseln"),
    ("KZ", "Kazakhstan", "Kasachstan"),
    ("LA", "Laos", "Laos"),
    ("LB", "Lebanon", "Libanon"),
    ("LC", "St. Lucia", "St. Lucia"),
    ("LI", "Liechtenstein", "Liechtenstein"),
    ("LK", "Sri Lanka", "Sri Lanka"),
    ("LR", "Liberia", "Liberia"),
    ("LS", "Lesotho", "Lesotho"),
    ("LT", "Lithuania", "Litauen"),
    ("LU", "Luxembourg", "Luxemburg"),
    ("LV", "Latvia", "Lettland"),
    ("LY", "Libya", "Libyen"),
    ("MA", "Morocco", "Marokko"),
    ("MC", "Monaco", "Monaco"),
    ("MD", "Moldova", "Republik Moldau"),
    ("ME", "Montenegro", "Montenegro"),
    ("MF", "St. Martin", "St. Martin"),
    ("MG", "Madagascar", "Madagaskar"),
    ("MH", "Marshall Islands", "Marshallinseln"),
    ("MK", "North Macedonia", "Nordmazedonien"),
    ("ML", "Mali", "Mali"),
    ("MM", "Myanmar (Burma)", "Myanmar"),
    ("MN", "Mongolia", "Mongolei"),
    ("MO", "Macao SAR China", "Sonderverwaltungsregion Macau"),
    ("MP", "Northern Mariana Islands", "Nördliche Marianen"),
    ("MQ", "Martinique", "Martinique"),
    ("MR", "Mauritania", "Mauretanien"),
    ("MS", "Montserrat", "Montserrat"),
    ("MT", "Malta", "Malta"),
    ("MU", "Mauritius", "Mauritius"),
    ("MV", "Maldives", "Malediven"),
    ("MW", "Malawi", "Malawi"),
    ("MX", "Mexico", "Mexiko"),
    ("MY", "Malaysia", "Malaysia"),
    ("MZ", "Mozambique", "Mosambik"),
    ("NA", "Namibia", "Namibia"),
    ("NC", "New Caledonia", "Neukaledonien"),
    ("NE", "Niger", "Niger"),
    ("NF", "Norfolk Island", "Norfolkinsel"),
    ("NG", "Nigeria", "Nigeria"),
    ("NH", "Vanuatu", "Vanuatu"),
    ("NI", "Nicaragua", "Nicaragua"),
    ("NL", "Netherlands", "Niederlande"),
    ("NO", "Norway", "Norwegen"),
    ("NP", "Nepal", "Nepal"),
    ("NR", "Nauru", "Nauru"),
    ("NU", "Niue", "Niue"),
    ("NZ", "New Zealand", "Neuseeland"),
    ("OM", "Oman", "Oman"),
    ("PA", "Panama", "Panama"),
    ("PE", "Peru", "Peru"),
    ("PF", "French Polynesia", "Französisch-Polynesien"),
    ("PG", "Papua New Guinea", "Papua-Neuguinea"),
    ("PH", "Philippines", "Philippinen"),
    ("PK", "Pakistan", "Pakistan"),
    ("PL", "Poland", "Polen"),
    ("PM", "St. Pierre & Miquelon", "St. Pierre und Miquelon"),
    ("PN", "Pitcairn Islands", "Pitcairninseln"),
    ("PR", "Puerto Rico", "Puerto Rico"),
    ("PS", "Palestinian Territories", "Palästinensische Autonomiegebiete"),
    ("PT", "Portugal", "Portugal"),
    ("PW", "Palau", "Palau"),
    ("PY", "Paraguay", "Paraguay"),
    ("QA", "Qatar", "Katar"),
    ("RE", "Réunion", "Réunion"),
    ("RH", "Zimbabwe", "Simbabwe"),
    ("RO", "Romania", "Rumänien"),
    ("RS", "Serbia", "Serbien"),
    ("RU", "Russia", "Russland"),
    ("RW", "Rwanda", "Ruanda"),
    ("SA", "Saudi Arabia", "Saudi-Arabien"),
    ("SB", "Solomon Islands", "Salomonen"),
    ("SC", "Seychelles", "Seychellen"),
    ("SD", "Sudan", "Sudan"),
    ("SE", "Sweden", "Schweden"),
    ("SG", "Singapore", "Singapur"),
    ("SH", "St. Helena, Ascension & Tristan da Cunha", "St. Helena"),
    ("SI", "Slovenia", "Slowenien"),
    ("SJ", "Svalbard & Jan Mayen", "Spitzbergen und Jan Mayen"),
    ("SK", "Slovakia", "Slowakei"),
    ("SL", "Sierra Leone", "Sierra Leone"),
    ("SM", "San Marino", "San Marino"),
    ("SN", "Senegal", "Senegal"),
    ("SO", "Somalia", "Somalia"),
    ("SR", "Suriname", "Suriname"),
    ("SS", "South Sudan", "Südsudan"),
    ("ST", "São Tomé & Príncipe", "São Tomé und Príncipe"),
    ("SU", "Russia", "Russland"),
    ("SV", "El Salvador", "El Salvador"),
    ("SX", "Sint Maarten", "Sint Maarten"),
    ("SY", "Syria", "Syrien"),
    ("SZ", "Eswatini", "Eswatini"),
    ("TC", "Turks & Caicos Islands", "Turks- und Caicosinseln"),
    ("TD", "Chad", "Tschad"),
    ("TF", "French Southern and Antarctic Lands", "Französische Süd- und Antarktisgebiete"),
    ("TG", "Togo", "Togo"),
    ("TH", "Thailand", "Thailand"),
    ("TJ", "Tajikistan", "Tadschikistan"),
    ("TK", "Tokelau", "Tokelau"),
    ("TL", "Timor-Leste", "Timor-Leste"),
    ("TM", "Turkmenistan", "Turkmenistan"),
    ("TN", "Tunisia", "Tunesien"),
    ("TO", "Tonga", "Tonga"),
    ("TP", "Timor-Leste", "Timor-Leste"),
    ("TR", "Türkiye", "Türkei"),
    ("TT", "Trinidad & Tobago", "Trinidad und Tobago"),
    ("TV", "Tuvalu", "Tuvalu"),
    ("TW", "Taiwan", "Taiwan"),
    ("TZ", "Tanzania", "Tansania"),
    ("UA", "Ukraine", "Ukraine"),
    ("UG", "Uganda", "Uganda"),
    ("UK", "United Kingdom", "Vereinigtes Königreich"),
    ("UM", "U.S. Outlying Islands", "Amerikanische Überseeinseln"),
    ("US", "United States", "Vereinigte Staaten"),
    ("UY", "Uruguay", "Uruguay"),
    ("UZ", "Uzbekistan", "Usbekistan"),
    ("VA", "Vatican City", "Vatikanstadt"),
    ("VC", "St. Vincent & Grenadines", "St. Vincent und die Grenadinen"),
    ("VD", "Vietnam", "Vietnam"),
    ("VE", "Venezuela", "Venezuela"),
    ("VG", "British Virgin Islands", "Britische Jungferninseln"),
    ("VI", "U.S. Virgin Islands", "Amerikanische Jungferninseln"),
    ("VN", "Vietnam", "Vietnam"),
    ("VU", "Vanuatu", "Vanuatu"),
    ("WF", "Wallis & Futuna", "Wallis und Futuna"),
    ("WS", "Samoa", "Samoa"),
    ("XK", "Kosovo", "Kosovo"),
    ("YD", "Yemen", "Jemen"),
    ("YE", "Yemen", "Jemen"),
    ("YT", "Mayotte", "Mayotte"),
    ("YU", "Serbia", "Serbien"),
    ("ZA", "South Africa", "Südafrika"),
    ("ZM", "Zambia", "Sambia"),
    ("ZR", "Congo - Kinshasa", "Kongo-Kinshasa"),
    ("ZW", "Zimbabwe", "Simbabwe"),
];

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn names_countries() {
        assert_eq!(name("DE", Lang::En), Some("Germany"));
        assert_eq!(name("DE", Lang::De), Some("Deutschland"));
        assert_eq!(name("XX", Lang::En), None);
        assert!(COUNTRIES.windows(2).all(|w| w[0].0 < w[1].0));
    }
}