use crate::utils::{multi_level, single_level};
use once_cell::sync::Lazy;
use std::collections::HashMap;
pub static COUNTRY_DICT: Lazy<HashMap<&'static str, HashMap<&'static str, &'static str>>> =
Lazy::new(|| {
[
("AD", single_level("Europe/Andorra")),
("AE", single_level("Asia/Dubai")),
("AF", single_level("Asia/Kabul")),
("AG", single_level("America/Antigua")),
("AI", single_level("America/Anguilla")),
("AL", single_level("Europe/Tirane")),
("AM", single_level("Asia/Yerevan")),
("AN", single_level("America/Curacao")),
("AO", single_level("Africa/Luanda")),
(
"AR",
multi_level(vec![
("01", "America/Argentina/Buenos_Aires"),
("02", "America/Argentina/Catamarca"),
("03", "America/Argentina/Tucuman"),
("04", "America/Argentina/Rio_Gallegos"),
("05", "America/Argentina/Cordoba"),
("06", "America/Argentina/Tucuman"),
("07", "America/Argentina/Buenos_Aires"),
("08", "America/Argentina/Buenos_Aires"),
("09", "America/Argentina/Tucuman"),
("10", "America/Argentina/Jujuy"),
("11", "America/Argentina/San_Luis"),
("12", "America/Argentina/La_Rioja"),
("13", "America/Argentina/Mendoza"),
("14", "America/Argentina/Buenos_Aires"),
("15", "America/Argentina/San_Luis"),
("16", "America/Argentina/Buenos_Aires"),
("17", "America/Argentina/Salta"),
("18", "America/Argentina/San_Juan"),
("19", "America/Argentina/San_Luis"),
("20", "America/Argentina/Rio_Gallegos"),
("21", "America/Argentina/Buenos_Aires"),
("22", "America/Argentina/Catamarca"),
("23", "America/Argentina/Ushuaia"),
("24", "America/Argentina/Tucuman"),
]),
),
("AS", single_level("US/Samoa")),
("AT", single_level("Europe/Vienna")),
(
"AU",
multi_level(vec![
("01", "Australia/Canberra"),
("02", "Australia/NSW"),
("03", "Australia/North"),
("04", "Australia/Queensland"),
("05", "Australia/South"),
("06", "Australia/Tasmania"),
("07", "Australia/Victoria"),
("08", "Australia/West"),
]),
),
("AW", single_level("America/Aruba")),
("AX", single_level("Europe/Mariehamn")),
("AZ", single_level("Asia/Baku")),
("BA", single_level("Europe/Sarajevo")),
("BB", single_level("America/Barbados")),
("BD", single_level("Asia/Dhaka")),
("BE", single_level("Europe/Brussels")),
("BF", single_level("Africa/Ouagadougou")),
("BG", single_level("Europe/Sofia")),
("BH", single_level("Asia/Bahrain")),
("BI", single_level("Africa/Bujumbura")),
("BJ", single_level("Africa/Porto-Novo")),
("BL", single_level("America/St_Barthelemy")),
("BM", single_level("Atlantic/Bermuda")),
("BN", single_level("Asia/Brunei")),
("BO", single_level("America/La_Paz")),
("BQ", single_level("America/Curacao")),
(
"BR",
multi_level(vec![
("01", "America/Rio_Branco"),
("02", "America/Maceio"),
("03", "America/Sao_Paulo"),
("04", "America/Manaus"),
("05", "America/Bahia"),
("06", "America/Fortaleza"),
("07", "America/Sao_Paulo"),
("08", "America/Sao_Paulo"),
("11", "America/Campo_Grande"),
("13", "America/Belem"),
("14", "America/Cuiaba"),
("15", "America/Sao_Paulo"),
("16", "America/Belem"),
("17", "America/Recife"),
("18", "America/Sao_Paulo"),
("20", "America/Fortaleza"),
("21", "America/Sao_Paulo"),
("22", "America/Recife"),
("23", "America/Sao_Paulo"),
("24", "America/Porto_Velho"),
("25", "America/Boa_Vista"),
("26", "America/Sao_Paulo"),
("27", "America/Sao_Paulo"),
("28", "America/Maceio"),
("29", "America/Sao_Paulo"),
("30", "America/Recife"),
("31", "America/Araguaina"),
]),
),
("BS", single_level("America/Nassau")),
("BT", single_level("Asia/Thimphu")),
("BW", single_level("Africa/Gaborone")),
("BY", single_level("Europe/Minsk")),
("BZ", single_level("America/Belize")),
(
"CA",
multi_level(vec![
("AB", "America/Edmonton"),
("BC", "America/Vancouver"),
("MB", "America/Winnipeg"),
("NB", "America/Halifax"),
("NL", "America/St_Johns"),
("NS", "America/Halifax"),
("NT", "America/Yellowknife"),
("NU", "America/Rankin_Inlet"),
("ON", "America/Toronto"),
("PE", "America/Halifax"),
("QC", "America/Montreal"),
("SK", "America/Regina"),
("YT", "America/Whitehorse"),
]),
),
("CC", single_level("Indian/Cocos")),
(
"CD",
multi_level(vec![
("02", "Africa/Kinshasa"),
("05", "Africa/Lubumbashi"),
("06", "Africa/Kinshasa"),
("08", "Africa/Kinshasa"),
("10", "Africa/Lubumbashi"),
("11", "Africa/Lubumbashi"),
("12", "Africa/Lubumbashi"),
]),
),
("CF", single_level("Africa/Bangui")),
("CG", single_level("Africa/Brazzaville")),
("CH", single_level("Europe/Zurich")),
("CI", single_level("Africa/Abidjan")),
("CK", single_level("Pacific/Rarotonga")),
("CL", single_level("Chile/Continental")),
("CM", single_level("Africa/Lagos")),
(
"CN",
multi_level(vec![
("01", "Asia/Shanghai"),
("02", "Asia/Shanghai"),
("03", "Asia/Shanghai"),
("04", "Asia/Shanghai"),
("05", "Asia/Harbin"),
("06", "Asia/Chongqing"),
("07", "Asia/Shanghai"),
("08", "Asia/Harbin"),
("09", "Asia/Shanghai"),
("10", "Asia/Shanghai"),
("11", "Asia/Chongqing"),
("12", "Asia/Shanghai"),
("13", "Asia/Urumqi"),
("14", "Asia/Chongqing"),
("15", "Asia/Chongqing"),
("16", "Asia/Chongqing"),
("18", "Asia/Chongqing"),
("19", "Asia/Harbin"),
("20", "Asia/Harbin"),
("21", "Asia/Chongqing"),
("22", "Asia/Harbin"),
("23", "Asia/Shanghai"),
("24", "Asia/Chongqing"),
("25", "Asia/Shanghai"),
("26", "Asia/Chongqing"),
("28", "Asia/Shanghai"),
("29", "Asia/Chongqing"),
("30", "Asia/Chongqing"),
("31", "Asia/Chongqing"),
("32", "Asia/Chongqing"),
("33", "Asia/Chongqing"),
]),
),
("CO", single_level("America/Bogota")),
("CR", single_level("America/Costa_Rica")),
("CU", single_level("America/Havana")),
("CV", single_level("Atlantic/Cape_Verde")),
("CW", single_level("America/Curacao")),
("CX", single_level("Indian/Christmas")),
("CY", single_level("Asia/Nicosia")),
("CZ", single_level("Europe/Prague")),
("DE", single_level("Europe/Berlin")),
("DJ", single_level("Africa/Djibouti")),
("DK", single_level("Europe/Copenhagen")),
("DM", single_level("America/Dominica")),
("DO", single_level("America/Santo_Domingo")),
("DZ", single_level("Africa/Algiers")),
(
"EC",
multi_level(vec![
("01", "Pacific/Galapagos"),
("02", "America/Guayaquil"),
("03", "America/Guayaquil"),
("04", "America/Guayaquil"),
("05", "America/Guayaquil"),
("06", "America/Guayaquil"),
("07", "America/Guayaquil"),
("08", "America/Guayaquil"),
("09", "America/Guayaquil"),
("10", "America/Guayaquil"),
("11", "America/Guayaquil"),
("12", "America/Guayaquil"),
("13", "America/Guayaquil"),
("14", "America/Guayaquil"),
("15", "America/Guayaquil"),
("17", "America/Guayaquil"),
("18", "America/Guayaquil"),
("19", "America/Guayaquil"),
("20", "America/Guayaquil"),
("22", "America/Guayaquil"),
]),
),
("EE", single_level("Europe/Tallinn")),
("EG", single_level("Africa/Cairo")),
("EH", single_level("Africa/El_Aaiun")),
("ER", single_level("Africa/Asmera")),
(
"ES",
multi_level(vec![
("07", "Europe/Madrid"),
("27", "Europe/Madrid"),
("29", "Europe/Madrid"),
("31", "Europe/Madrid"),
("32", "Europe/Madrid"),
("34", "Europe/Madrid"),
("39", "Europe/Madrid"),
("51", "Africa/Ceuta"),
("52", "Europe/Madrid"),
("53", "Atlantic/Canary"),
("54", "Europe/Madrid"),
("55", "Europe/Madrid"),
("56", "Europe/Madrid"),
("57", "Europe/Madrid"),
("58", "Europe/Madrid"),
("59", "Europe/Madrid"),
("60", "Europe/Madrid"),
]),
),
("ET", single_level("Africa/Addis_Ababa")),
("FI", single_level("Europe/Helsinki")),
("FJ", single_level("Pacific/Fiji")),
("FK", single_level("Atlantic/Stanley")),
("FO", single_level("Atlantic/Faeroe")),
("FR", single_level("Europe/Paris")),
("FX", single_level("Europe/Paris")),
("GA", single_level("Africa/Libreville")),
("GB", single_level("Europe/London")),
("GD", single_level("America/Grenada")),
("GE", single_level("Asia/Tbilisi")),
("GF", single_level("America/Cayenne")),
("GG", single_level("Europe/Guernsey")),
("GH", single_level("Africa/Accra")),
("GI", single_level("Europe/Gibraltar")),
(
"GL",
multi_level(vec![
("01", "America/Thule"),
("02", "America/Godthab"),
("03", "America/Godthab"),
]),
),
("GM", single_level("Africa/Banjul")),
("GN", single_level("Africa/Conakry")),
("GP", single_level("America/Guadeloupe")),
("GQ", single_level("Africa/Malabo")),
("GR", single_level("Europe/Athens")),
("GS", single_level("Atlantic/South_Georgia")),
("GT", single_level("America/Guatemala")),
("GU", single_level("Pacific/Guam")),
("GW", single_level("Africa/Bissau")),
("GY", single_level("America/Guyana")),
("HK", single_level("Asia/Hong_Kong")),
("HN", single_level("America/Tegucigalpa")),
("HR", single_level("Europe/Zagreb")),
("HT", single_level("America/Port-au-Prince")),
("HU", single_level("Europe/Budapest")),
(
"ID",
multi_level(vec![
("01", "Asia/Pontianak"),
("02", "Asia/Makassar"),
("03", "Asia/Jakarta"),
("04", "Asia/Jakarta"),
("05", "Asia/Jakarta"),
("06", "Asia/Jakarta"),
("07", "Asia/Jakarta"),
("08", "Asia/Jakarta"),
("09", "Asia/Jayapura"),
("10", "Asia/Jakarta"),
("11", "Asia/Pontianak"),
("12", "Asia/Makassar"),
("13", "Asia/Makassar"),
("14", "Asia/Makassar"),
("15", "Asia/Jakarta"),
("16", "Asia/Makassar"),
("17", "Asia/Makassar"),
("18", "Asia/Makassar"),
("19", "Asia/Pontianak"),
("20", "Asia/Makassar"),
("21", "Asia/Makassar"),
("22", "Asia/Makassar"),
("23", "Asia/Makassar"),
("24", "Asia/Jakarta"),
("25", "Asia/Pontianak"),
("26", "Asia/Pontianak"),
("30", "Asia/Jakarta"),
("31", "Asia/Makassar"),
("33", "Asia/Jakarta"),
]),
),
("IE", single_level("Europe/Dublin")),
("IL", single_level("Asia/Jerusalem")),
("IM", single_level("Europe/Isle_of_Man")),
("IN", single_level("Asia/Calcutta")),
("IO", single_level("Indian/Chagos")),
("IQ", single_level("Asia/Baghdad")),
("IR", single_level("Asia/Tehran")),
("IS", single_level("Atlantic/Reykjavik")),
("IT", single_level("Europe/Rome")),
("JE", single_level("Europe/Jersey")),
("JM", single_level("America/Jamaica")),
("JO", single_level("Asia/Amman")),
("JP", single_level("Asia/Tokyo")),
("KE", single_level("Africa/Nairobi")),
("KG", single_level("Asia/Bishkek")),
("KH", single_level("Asia/Phnom_Penh")),
("KI", single_level("Pacific/Tarawa")),
("KM", single_level("Indian/Comoro")),
("KN", single_level("America/St_Kitts")),
("KP", single_level("Asia/Pyongyang")),
("KR", single_level("Asia/Seoul")),
("KW", single_level("Asia/Kuwait")),
("KY", single_level("America/Cayman")),
(
"KZ",
multi_level(vec![
("01", "Asia/Almaty"),
("02", "Asia/Almaty"),
("03", "Asia/Qyzylorda"),
("04", "Asia/Aqtobe"),
("05", "Asia/Qyzylorda"),
("06", "Asia/Aqtau"),
("07", "Asia/Oral"),
("08", "Asia/Qyzylorda"),
("09", "Asia/Aqtau"),
("10", "Asia/Qyzylorda"),
("11", "Asia/Almaty"),
("12", "Asia/Qyzylorda"),
("13", "Asia/Aqtobe"),
("14", "Asia/Qyzylorda"),
("15", "Asia/Almaty"),
("16", "Asia/Aqtobe"),
("17", "Asia/Almaty"),
]),
),
("LA", single_level("Asia/Vientiane")),
("LB", single_level("Asia/Beirut")),
("LC", single_level("America/St_Lucia")),
("LI", single_level("Europe/Vaduz")),
("LK", single_level("Asia/Colombo")),
("LR", single_level("Africa/Monrovia")),
("LS", single_level("Africa/Maseru")),
("LT", single_level("Europe/Vilnius")),
("LU", single_level("Europe/Luxembourg")),
("LV", single_level("Europe/Riga")),
("LY", single_level("Africa/Tripoli")),
("MA", single_level("Africa/Casablanca")),
("MC", single_level("Europe/Monaco")),
("MD", single_level("Europe/Chisinau")),
("ME", single_level("Europe/Podgorica")),
("MF", single_level("America/Marigot")),
("MG", single_level("Indian/Antananarivo")),
("MK", single_level("Europe/Skopje")),
("ML", single_level("Africa/Bamako")),
("MM", single_level("Asia/Rangoon")),
("MN", single_level("Asia/Choibalsan")),
("MO", single_level("Asia/Macao")),
("MP", single_level("Pacific/Saipan")),
("MQ", single_level("America/Martinique")),
("MR", single_level("Africa/Nouakchott")),
("MS", single_level("America/Montserrat")),
("MT", single_level("Europe/Malta")),
("MU", single_level("Indian/Mauritius")),
("MV", single_level("Indian/Maldives")),
("MW", single_level("Africa/Blantyre")),
(
"MX",
multi_level(vec![
("01", "America/Mexico_City"),
("02", "America/Tijuana"),
("03", "America/Hermosillo"),
("04", "America/Merida"),
("05", "America/Mexico_City"),
("06", "America/Chihuahua"),
("07", "America/Monterrey"),
("08", "America/Mexico_City"),
("09", "America/Mexico_City"),
("10", "America/Mazatlan"),
("11", "America/Mexico_City"),
("12", "America/Mexico_City"),
("13", "America/Mexico_City"),
("14", "America/Mazatlan"),
("15", "America/Chihuahua"),
("16", "America/Mexico_City"),
("17", "America/Mexico_City"),
("18", "America/Mazatlan"),
("19", "America/Monterrey"),
("20", "America/Mexico_City"),
("21", "America/Mexico_City"),
("22", "America/Mexico_City"),
("23", "America/Cancun"),
("24", "America/Mexico_City"),
("25", "America/Mazatlan"),
("26", "America/Hermosillo"),
("27", "America/Merida"),
("28", "America/Monterrey"),
("29", "America/Mexico_City"),
("30", "America/Mexico_City"),
("31", "America/Merida"),
("32", "America/Monterrey"),
]),
),
(
"MY",
multi_level(vec![
("01", "Asia/Kuala_Lumpur"),
("02", "Asia/Kuala_Lumpur"),
("03", "Asia/Kuala_Lumpur"),
("04", "Asia/Kuala_Lumpur"),
("05", "Asia/Kuala_Lumpur"),
("06", "Asia/Kuala_Lumpur"),
("07", "Asia/Kuala_Lumpur"),
("08", "Asia/Kuala_Lumpur"),
("09", "Asia/Kuala_Lumpur"),
("11", "Asia/Kuching"),
("12", "Asia/Kuala_Lumpur"),
("13", "Asia/Kuala_Lumpur"),
("14", "Asia/Kuala_Lumpur"),
("15", "Asia/Kuching"),
("16", "Asia/Kuching"),
]),
),
("MZ", single_level("Africa/Maputo")),
("NA", single_level("Africa/Windhoek")),
("NC", single_level("Pacific/Noumea")),
("NE", single_level("Africa/Niamey")),
("NF", single_level("Pacific/Norfolk")),
("NG", single_level("Africa/Lagos")),
("NI", single_level("America/Managua")),
("NL", single_level("Europe/Amsterdam")),
("NO", single_level("Europe/Oslo")),
("NP", single_level("Asia/Katmandu")),
("NR", single_level("Pacific/Nauru")),
("NU", single_level("Pacific/Niue")),
(
"NZ",
multi_level(vec![
("85", "Pacific/Auckland"),
("E7", "Pacific/Auckland"),
("E8", "Pacific/Auckland"),
("E9", "Pacific/Auckland"),
("F1", "Pacific/Auckland"),
("F2", "Pacific/Auckland"),
("F3", "Pacific/Auckland"),
("F4", "Pacific/Auckland"),
("F5", "Pacific/Auckland"),
("F7", "Pacific/Chatham"),
("F8", "Pacific/Auckland"),
("F9", "Pacific/Auckland"),
("G1", "Pacific/Auckland"),
("G2", "Pacific/Auckland"),
("G3", "Pacific/Auckland"),
]),
),
("OM", single_level("Asia/Muscat")),
("PA", single_level("America/Panama")),
("PE", single_level("America/Lima")),
("PF", single_level("Pacific/Marquesas")),
("PG", single_level("Pacific/Port_Moresby")),
("PH", single_level("Asia/Manila")),
("PK", single_level("Asia/Karachi")),
("PL", single_level("Europe/Warsaw")),
("PM", single_level("America/Miquelon")),
("PN", single_level("Pacific/Pitcairn")),
("PR", single_level("America/Puerto_Rico")),
("PS", single_level("Asia/Gaza")),
(
"PT",
multi_level(vec![
("02", "Europe/Lisbon"),
("03", "Europe/Lisbon"),
("04", "Europe/Lisbon"),
("05", "Europe/Lisbon"),
("06", "Europe/Lisbon"),
("07", "Europe/Lisbon"),
("08", "Europe/Lisbon"),
("09", "Europe/Lisbon"),
("10", "Atlantic/Madeira"),
("11", "Europe/Lisbon"),
("13", "Europe/Lisbon"),
("14", "Europe/Lisbon"),
("16", "Europe/Lisbon"),
("17", "Europe/Lisbon"),
("18", "Europe/Lisbon"),
("19", "Europe/Lisbon"),
("20", "Europe/Lisbon"),
("21", "Europe/Lisbon"),
("22", "Europe/Lisbon"),
]),
),
("PW", single_level("Pacific/Palau")),
("PY", single_level("America/Asuncion")),
("QA", single_level("Asia/Qatar")),
("RE", single_level("Indian/Reunion")),
("RO", single_level("Europe/Bucharest")),
("RS", single_level("Europe/Belgrade")),
(
"RU",
multi_level(vec![
("01", "Europe/Volgograd"),
("02", "Asia/Irkutsk"),
("03", "Asia/Novokuznetsk"),
("04", "Asia/Novosibirsk"),
("05", "Asia/Vladivostok"),
("06", "Europe/Moscow"),
("07", "Europe/Volgograd"),
("08", "Europe/Samara"),
("09", "Europe/Moscow"),
("10", "Europe/Moscow"),
("11", "Asia/Irkutsk"),
("13", "Asia/Yekaterinburg"),
("14", "Asia/Irkutsk"),
("15", "Asia/Anadyr"),
("16", "Europe/Samara"),
("17", "Europe/Volgograd"),
("18", "Asia/Krasnoyarsk"),
("20", "Asia/Irkutsk"),
("21", "Europe/Moscow"),
("22", "Europe/Volgograd"),
("23", "Europe/Kaliningrad"),
("24", "Europe/Volgograd"),
("25", "Europe/Moscow"),
("26", "Asia/Kamchatka"),
("27", "Europe/Volgograd"),
("28", "Europe/Moscow"),
("29", "Asia/Novokuznetsk"),
("30", "Asia/Vladivostok"),
("31", "Asia/Krasnoyarsk"),
("32", "Asia/Omsk"),
("33", "Asia/Yekaterinburg"),
("34", "Asia/Yekaterinburg"),
("35", "Asia/Yekaterinburg"),
("36", "Asia/Anadyr"),
("37", "Europe/Moscow"),
("38", "Europe/Volgograd"),
("39", "Asia/Krasnoyarsk"),
("40", "Asia/Yekaterinburg"),
("41", "Europe/Moscow"),
("42", "Europe/Moscow"),
("43", "Europe/Moscow"),
("44", "Asia/Magadan"),
("45", "Europe/Samara"),
("46", "Europe/Samara"),
("47", "Europe/Moscow"),
("48", "Europe/Moscow"),
("49", "Europe/Moscow"),
("50", "Asia/Yekaterinburg"),
("51", "Europe/Moscow"),
("52", "Europe/Moscow"),
("53", "Asia/Novosibirsk"),
("54", "Asia/Omsk"),
("55", "Europe/Samara"),
("56", "Europe/Moscow"),
("57", "Europe/Samara"),
("58", "Asia/Yekaterinburg"),
("59", "Asia/Vladivostok"),
("60", "Europe/Kaliningrad"),
("61", "Europe/Volgograd"),
("62", "Europe/Moscow"),
("63", "Asia/Yakutsk"),
("64", "Asia/Sakhalin"),
("65", "Europe/Samara"),
("66", "Europe/Moscow"),
("67", "Europe/Samara"),
("68", "Europe/Volgograd"),
("69", "Europe/Moscow"),
("70", "Europe/Volgograd"),
("71", "Asia/Yekaterinburg"),
("72", "Europe/Moscow"),
("73", "Europe/Samara"),
("74", "Asia/Krasnoyarsk"),
("75", "Asia/Novosibirsk"),
("76", "Europe/Moscow"),
("77", "Europe/Moscow"),
("78", "Asia/Yekaterinburg"),
("79", "Asia/Irkutsk"),
("80", "Asia/Yekaterinburg"),
("81", "Europe/Samara"),
("82", "Asia/Irkutsk"),
("83", "Europe/Moscow"),
("84", "Europe/Volgograd"),
("85", "Europe/Moscow"),
("86", "Europe/Moscow"),
("87", "Asia/Novosibirsk"),
("88", "Europe/Moscow"),
("89", "Asia/Vladivostok"),
]),
),
("RW", single_level("Africa/Kigali")),
("SA", single_level("Asia/Riyadh")),
("SB", single_level("Pacific/Guadalcanal")),
("SC", single_level("Indian/Mahe")),
("SD", single_level("Africa/Khartoum")),
("SE", single_level("Europe/Stockholm")),
("SG", single_level("Asia/Singapore")),
("SH", single_level("Atlantic/St_Helena")),
("SI", single_level("Europe/Ljubljana")),
("SJ", single_level("Arctic/Longyearbyen")),
("SK", single_level("Europe/Bratislava")),
("SL", single_level("Africa/Freetown")),
("SM", single_level("Europe/San_Marino")),
("SN", single_level("Africa/Dakar")),
("SO", single_level("Africa/Mogadishu")),
("SR", single_level("America/Paramaribo")),
("SS", single_level("Africa/Juba")),
("ST", single_level("Africa/Sao_Tome")),
("SV", single_level("America/El_Salvador")),
("SX", single_level("America/Lower_Princes")),
("SY", single_level("Asia/Damascus")),
("SZ", single_level("Africa/Mbabane")),
("TC", single_level("America/Grand_Turk")),
("TD", single_level("Africa/Ndjamena")),
("TF", single_level("Indian/Kerguelen")),
("TG", single_level("Africa/Lome")),
("TH", single_level("Asia/Bangkok")),
("TJ", single_level("Asia/Dushanbe")),
("TK", single_level("Pacific/Fakaofo")),
("TL", single_level("Asia/Dili")),
("TM", single_level("Asia/Ashgabat")),
("TN", single_level("Africa/Tunis")),
("TO", single_level("Pacific/Tongatapu")),
("TR", single_level("Europe/Istanbul")),
("TT", single_level("America/Port_of_Spain")),
("TV", single_level("Pacific/Funafuti")),
("TW", single_level("Asia/Taipei")),
("TZ", single_level("Africa/Dar_es_Salaam")),
(
"UA",
multi_level(vec![
("01", "Europe/Kiev"),
("02", "Europe/Uzhgorod"),
("03", "Europe/Zaporozhye"),
("04", "Europe/Simferopol"),
("05", "Europe/Dnipro"),
("06", "Europe/Zaporozhye"),
]),
),
("UG", single_level("Africa/Kampala")),
("UM", single_level("Pacific/Johnston")),
(
"US",
multi_level(vec![
("AK", "America/Anchorage"),
("AL", "America/Chicago"),
("AR", "America/Chicago"),
("AS", "Pacific/Pago_Pago"),
("AZ", "America/Phoenix"),
("CA", "America/Los_Angeles"),
("CO", "America/Denver"),
("CT", "America/New_York"),
("DC", "America/New_York"),
("DE", "America/New_York"),
("FL", "America/New_York"),
("GA", "America/New_York"),
("GU", "Pacific/Guam"),
("HI", "Pacific/Honolulu"),
("IA", "America/Chicago"),
("ID", "America/Denver"),
("IL", "America/Chicago"),
("IN", "America/Indianapolis"),
("KS", "America/Chicago"),
("KY", "America/New_York"),
("LA", "America/Chicago"),
("MA", "America/New_York"),
("MD", "America/New_York"),
("ME", "America/New_York"),
("MI", "America/Detroit"),
("MN", "America/Chicago"),
("MO", "America/Chicago"),
("MP", "Pacific/Saipan"),
("MS", "America/Chicago"),
("MT", "America/Denver"),
("NC", "America/New_York"),
("ND", "America/Chicago"),
("NE", "America/Denver"),
("NH", "America/New_York"),
("NJ", "America/New_York"),
("NM", "America/Denver"),
("NV", "America/Los_Angeles"),
("NY", "America/New_York"),
("OH", "America/New_York"),
("OK", "America/Chicago"),
("OR", "America/Los_Angeles"),
("PA", "America/New_York"),
("PR", "America/Puerto_Rico"),
("RI", "America/New_York"),
("SC", "America/New_York"),
("SD", "America/Chicago"),
("TN", "America/Chicago"),
("TX", "America/Chicago"),
("UM", "Pacific/Midway"),
("UT", "America/Denver"),
("VA", "America/New_York"),
("VI", "America/St_Thomas"),
("VT", "America/New_York"),
("WA", "America/Los_Angeles"),
("WI", "America/Chicago"),
("WV", "America/New_York"),
("WY", "America/Denver"),
]),
),
("UY", single_level("America/Montevideo")),
(
"UZ",
multi_level(vec![
("01", "Asia/Samarkand"),
("02", "Asia/Tashkent"),
("03", "Asia/Bukhara"),
("05", "Asia/Tashkent"),
("06", "Asia/Tashkent"),
("07", "Asia/Tashkent"),
("08", "Asia/Tashkent"),
("09", "Asia/Tashkent"),
("10", "Asia/Samarkand"),
("12", "Asia/Tashkent"),
("13", "Asia/Tashkent"),
("14", "Asia/Tashkent"),
("15", "Asia/Samarkand"),
("16", "Asia/Samarkand"),
("20", "Asia/Tashkent"),
("21", "Asia/Samarkand"),
("22", "Asia/Tashkent"),
("23", "Asia/Tashkent"),
("24", "Asia/Samarkand"),
("25", "Asia/Samarkand"),
("26", "Asia/Samarkand"),
("27", "Asia/Samarkand"),
("28", "Asia/Tashkent"),
]),
),
("VA", single_level("Europe/Vatican")),
("VC", single_level("America/St_Vincent")),
("VE", single_level("America/Caracas")),
("VG", single_level("America/Tortola")),
("VI", single_level("America/St_Thomas")),
("VN", single_level("Asia/Ho_Chi_Minh")),
("VU", single_level("Pacific/Efate")),
("WF", single_level("Pacific/Wallis")),
("WS", single_level("Pacific/Apia")),
("YE", single_level("Asia/Aden")),
("YT", single_level("Indian/Mayotte")),
("ZA", single_level("Africa/Johannesburg")),
("ZM", single_level("Africa/Lusaka")),
("ZW", single_level("Africa/Harare")),
]
.iter()
.cloned()
.collect()
});
pub fn time_zone_by_country<'a>(
country_code: &str,
key1: &str,
key2: Option<&str>,
) -> Option<&'a str> {
COUNTRY_DICT
.get(country_code)
.and_then(|inner_map| {
let value = inner_map.get(key1);
if let Some(inner_key) = key2 {
inner_map.get(inner_key)
} else {
value
}
})
.copied()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_time_zone_by_country() {
assert_eq!(
time_zone_by_country("AD", "default", None),
Some("Europe/Andorra")
);
assert_eq!(
time_zone_by_country("AR", "default", Some("01")),
Some("America/Argentina/Buenos_Aires")
);
assert_eq!(time_zone_by_country("XX", "default", None), None);
assert_eq!(
time_zone_by_country("AD", "non_existent", Some("inner_key")),
None
);
assert_eq!(
time_zone_by_country("XX", "non_existent", Some("inner_key")),
None
);
}
}