use crate::prelude::tz::*;
use chrono::offset::{Offset, TimeZone};
use chrono::{Datelike, FixedOffset, NaiveDate, NaiveDateTime};
use chrono_tz::Asia::*;
use std::str::FromStr;
use strum_macros::EnumString;
#[derive(Debug, EnumString, Clone)]
#[non_exhaustive]
pub enum Asia {
Aden,
Almaty,
Amman,
Anadyr,
Aqtau,
Aqtobe,
Ashgabat,
Ashkhabad,
Atyrau,
Baghdad,
Bahrain,
Baku,
Bangkok,
Barnaul,
Beirut,
Bishkek,
Brunei,
Calcutta,
Chita,
Choibalsan,
Chongqing,
Chungking,
Colombo,
Dacca,
Damascus,
Dhaka,
Dili,
Dubai,
Dushanbe,
Famagusta,
Gaza,
Harbin,
Hebron,
#[strum(serialize = "Ho_Chi_Minh")]
HoChiMinh,
#[strum(serialize = "Hong_Kong")]
HongKong,
Hovd,
Irkutsk,
Istanbul,
Jakarta,
Jayapura,
Jerusalem,
Kabul,
Kamchatka,
Karachi,
Kashgar,
Kathmandu,
Katmandu,
Khandyga,
Kolkata,
Krasnoyarsk,
#[strum(serialize = "Kuala_Lumpur")]
KualaLumpur,
Kuching,
Kuwait,
Macao,
Macau,
Magadan,
Makassar,
Manila,
Muscat,
Nicosia,
Novokuznetsk,
Novosibirsk,
Omsk,
Oral,
#[strum(serialize = "Phnom_Penh")]
PhnomPenh,
Pontianak,
Pyongyang,
Qatar,
Qostanay,
Qyzylorda,
Rangoon,
Riyadh,
Saigon,
Sakhalin,
Samarkand,
Seoul,
Shanghai,
Singapore,
Srednekolymsk,
Taipei,
Tashkent,
Tbilisi,
Tehran,
#[strum(serialize = "Tel_Aviv")]
TelAviv,
Thimbu,
Thimphu,
Tokyo,
Tomsk,
#[strum(serialize = "Ujung_Pandang")]
UjungPandang,
Ulaanbaatar,
#[strum(serialize = "Ulan_Bator")]
UlanBator,
Urumqi,
#[strum(serialize = "Ust-Nera")]
UstNera,
Vientiane,
Vladivostok,
Yakutsk,
Yangon,
Yekaterinburg,
Yerevan,
}
impl Asia {
pub(crate) fn try_from_path(p: &[&str]) -> Result<Self, Error> {
if p.len() != 1 {
return Err(Error::TooManyElements(p.len()));
}
Self::from_str(p[0]).map_err(|_| Error::WrongTimeZone(p[0].to_string()))
}
pub(crate) fn get_tz(&self, datetime: &NaiveDateTime) -> FixedOffset {
let p = match self {
Self::Aden => Aden.from_utc_datetime(datetime),
Self::Almaty => Almaty.from_utc_datetime(datetime),
Self::Amman => Amman.from_utc_datetime(datetime),
Self::Anadyr => Anadyr.from_utc_datetime(datetime),
Self::Aqtau => Aqtau.from_utc_datetime(datetime),
Self::Aqtobe => Aqtobe.from_utc_datetime(datetime),
Self::Ashgabat => Ashgabat.from_utc_datetime(datetime),
Self::Ashkhabad => Ashkhabad.from_utc_datetime(datetime),
Self::Atyrau => Atyrau.from_utc_datetime(datetime),
Self::Baghdad => Baghdad.from_utc_datetime(datetime),
Self::Bahrain => Bahrain.from_utc_datetime(datetime),
Self::Baku => Baku.from_utc_datetime(datetime),
Self::Bangkok => Bangkok.from_utc_datetime(datetime),
Self::Barnaul => Barnaul.from_utc_datetime(datetime),
Self::Beirut => Beirut.from_utc_datetime(datetime),
Self::Bishkek => Bishkek.from_utc_datetime(datetime),
Self::Brunei => Brunei.from_utc_datetime(datetime),
Self::Calcutta => Calcutta.from_utc_datetime(datetime),
Self::Chita => Chita.from_utc_datetime(datetime),
Self::Choibalsan => Choibalsan.from_utc_datetime(datetime),
Self::Chongqing => Chongqing.from_utc_datetime(datetime),
Self::Chungking => Chungking.from_utc_datetime(datetime),
Self::Colombo => Colombo.from_utc_datetime(datetime),
Self::Dacca => Dacca.from_utc_datetime(datetime),
Self::Damascus => Damascus.from_utc_datetime(datetime),
Self::Dhaka => Dhaka.from_utc_datetime(datetime),
Self::Dili => Dili.from_utc_datetime(datetime),
Self::Dubai => Dubai.from_utc_datetime(datetime),
Self::Dushanbe => Dushanbe.from_utc_datetime(datetime),
Self::Famagusta => Famagusta.from_utc_datetime(datetime),
Self::Gaza => Gaza.from_utc_datetime(datetime),
Self::Harbin => Harbin.from_utc_datetime(datetime),
Self::Hebron => Hebron.from_utc_datetime(datetime),
Self::HoChiMinh => Ho_Chi_Minh.from_utc_datetime(datetime),
Self::HongKong => Hong_Kong.from_utc_datetime(datetime),
Self::Hovd => Hovd.from_utc_datetime(datetime),
Self::Irkutsk => Irkutsk.from_utc_datetime(datetime),
Self::Istanbul => Istanbul.from_utc_datetime(datetime),
Self::Jakarta => Jakarta.from_utc_datetime(datetime),
Self::Jayapura => Jayapura.from_utc_datetime(datetime),
Self::Jerusalem => Jerusalem.from_utc_datetime(datetime),
Self::Kabul => Kabul.from_utc_datetime(datetime),
Self::Kamchatka => Kamchatka.from_utc_datetime(datetime),
Self::Karachi => Karachi.from_utc_datetime(datetime),
Self::Kashgar => Kashgar.from_utc_datetime(datetime),
Self::Kathmandu => Kathmandu.from_utc_datetime(datetime),
Self::Katmandu => Katmandu.from_utc_datetime(datetime),
Self::Khandyga => Khandyga.from_utc_datetime(datetime),
Self::Kolkata => Kolkata.from_utc_datetime(datetime),
Self::Krasnoyarsk => Krasnoyarsk.from_utc_datetime(datetime),
Self::KualaLumpur => Kuala_Lumpur.from_utc_datetime(datetime),
Self::Kuching => Kuching.from_utc_datetime(datetime),
Self::Kuwait => Kuwait.from_utc_datetime(datetime),
Self::Macao => Macao.from_utc_datetime(datetime),
Self::Macau => Macau.from_utc_datetime(datetime),
Self::Magadan => Magadan.from_utc_datetime(datetime),
Self::Makassar => Makassar.from_utc_datetime(datetime),
Self::Manila => Manila.from_utc_datetime(datetime),
Self::Muscat => Muscat.from_utc_datetime(datetime),
Self::Nicosia => Nicosia.from_utc_datetime(datetime),
Self::Novokuznetsk => Novokuznetsk.from_utc_datetime(datetime),
Self::Novosibirsk => Novosibirsk.from_utc_datetime(datetime),
Self::Omsk => Omsk.from_utc_datetime(datetime),
Self::Oral => Oral.from_utc_datetime(datetime),
Self::PhnomPenh => Phnom_Penh.from_utc_datetime(datetime),
Self::Pontianak => Pontianak.from_utc_datetime(datetime),
Self::Pyongyang => Pyongyang.from_utc_datetime(datetime),
Self::Qatar => Qatar.from_utc_datetime(datetime),
Self::Qostanay => Qostanay.from_utc_datetime(datetime),
Self::Qyzylorda => Qyzylorda.from_utc_datetime(datetime),
Self::Rangoon => Rangoon.from_utc_datetime(datetime),
Self::Riyadh => Riyadh.from_utc_datetime(datetime),
Self::Saigon => Saigon.from_utc_datetime(datetime),
Self::Sakhalin => Sakhalin.from_utc_datetime(datetime),
Self::Samarkand => Samarkand.from_utc_datetime(datetime),
Self::Seoul => Seoul.from_utc_datetime(datetime),
Self::Shanghai => Shanghai.from_utc_datetime(datetime),
Self::Singapore => Singapore.from_utc_datetime(datetime),
Self::Srednekolymsk => Srednekolymsk.from_utc_datetime(datetime),
Self::Taipei => Taipei.from_utc_datetime(datetime),
Self::Tashkent => Tashkent.from_utc_datetime(datetime),
Self::Tbilisi => Tbilisi.from_utc_datetime(datetime),
Self::Tehran => Tehran.from_utc_datetime(datetime),
Self::TelAviv => Tel_Aviv.from_utc_datetime(datetime),
Self::Thimbu => Thimbu.from_utc_datetime(datetime),
Self::Thimphu => Thimphu.from_utc_datetime(datetime),
Self::Tokyo => Tokyo.from_utc_datetime(datetime),
Self::Tomsk => Tomsk.from_utc_datetime(datetime),
Self::UjungPandang => Ujung_Pandang.from_utc_datetime(datetime),
Self::Ulaanbaatar => Ulaanbaatar.from_utc_datetime(datetime),
Self::UlanBator => Ulan_Bator.from_utc_datetime(datetime),
Self::Urumqi => Urumqi.from_utc_datetime(datetime),
Self::UstNera => UstNera.from_utc_datetime(datetime),
Self::Vientiane => Vientiane.from_utc_datetime(datetime),
Self::Vladivostok => Vladivostok.from_utc_datetime(datetime),
Self::Yakutsk => Yakutsk.from_utc_datetime(datetime),
Self::Yangon => Yangon.from_utc_datetime(datetime),
Self::Yekaterinburg => Yekaterinburg.from_utc_datetime(datetime),
Self::Yerevan => Yerevan.from_utc_datetime(datetime),
};
p.timezone()
.offset_from_utc_date(&NaiveDate::from_ymd(
datetime.year(),
datetime.month(),
datetime.day(),
))
.fix()
}
}