zmanim 0.0.7

Hebrew Zmanim library
Documentation
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()
    }
}