zmanim 0.0.7

Hebrew Zmanim library
Documentation
use crate::prelude::tz::*;
use chrono::offset::{Offset, TimeZone};
use chrono::prelude::*;
use chrono::{FixedOffset, NaiveDate, NaiveDateTime};
use chrono_tz::Africa::*;
use std::str::FromStr;
use strum_macros::EnumString;
#[derive(Debug, EnumString, Clone)]
#[non_exhaustive]
pub enum Africa {
    Abidjan,
    Accra,
    AddisAbaba,
    Algiers,
    Asmara,
    Asmera,
    Bamako,
    Bangui,
    Banjul,
    Bissau,
    Blantyre,
    Brazzaville,
    Bujumbura,
    Cairo,
    Casablanca,
    Ceuta,
    Conakry,
    Dakar,
    DarEsSalaam,
    Djibouti,
    Douala,
    ElAaiun,
    Freetown,
    Gaborone,
    Harare,
    Johannesburg,
    Juba,
    Kampala,
    Khartoum,
    Kigali,
    Kinshasa,
    Lagos,
    Libreville,
    Lome,
    Luanda,
    Lubumbashi,
    Lusaka,
    Malabo,
    Maputo,
    Maseru,
    Mbabane,
    Mogadishu,
    Monrovia,
    Nairobi,
    Ndjamena,
    Niamey,
    Nouakchott,
    Ouagadougou,
    PortoNovo,
    SaoTome,
    Timbuktu,
    Tripoli,
    Tunis,
    Windhoek,
}
impl Africa {
    pub(crate) fn try_from_path(p: &[&str]) -> Result<Self, Error> {
        if p.len() != 1 {
            return Err(Error::TooManyElements(p.len()));
        }
        match p[0] {
            "Addis_Ababa" => Ok(Self::AddisAbaba),
            "Dar_es_Salaam" => Ok(Self::DarEsSalaam),
            "El_Aaiun" => Ok(Self::ElAaiun),
            "Porto-Novo" => Ok(Self::PortoNovo),
            "Sao_Tome" => Ok(Self::SaoTome),
            other => Self::from_str(other).map_err(|_| Error::WrongTimeZone(p[0].to_string())),
        }
    }
    pub(crate) fn get_tz(&self, datetime: &NaiveDateTime) -> FixedOffset {
        let p = match self {
            Self::Abidjan => Abidjan.from_utc_datetime(datetime),
            Self::Windhoek => Windhoek.from_utc_datetime(datetime),
            Self::Accra => Accra.from_utc_datetime(datetime),
            Self::AddisAbaba => Addis_Ababa.from_utc_datetime(datetime),
            Self::Algiers => Algiers.from_utc_datetime(datetime),
            Self::Asmara => Asmara.from_utc_datetime(datetime),
            Self::Asmera => Asmera.from_utc_datetime(datetime),
            Self::Bamako => Bamako.from_utc_datetime(datetime),
            Self::Bangui => Bangui.from_utc_datetime(datetime),
            Self::Banjul => Banjul.from_utc_datetime(datetime),
            Self::Bissau => Bissau.from_utc_datetime(datetime),
            Self::Blantyre => Blantyre.from_utc_datetime(datetime),
            Self::Brazzaville => Brazzaville.from_utc_datetime(datetime),
            Self::Bujumbura => Bujumbura.from_utc_datetime(datetime),
            Self::Cairo => Cairo.from_utc_datetime(datetime),
            Self::Casablanca => Casablanca.from_utc_datetime(datetime),
            Self::Ceuta => Ceuta.from_utc_datetime(datetime),
            Self::Conakry => Conakry.from_utc_datetime(datetime),
            Self::Dakar => Dakar.from_utc_datetime(datetime),
            Self::DarEsSalaam => Dar_es_Salaam.from_utc_datetime(datetime),
            Self::Djibouti => Djibouti.from_utc_datetime(datetime),
            Self::Douala => Douala.from_utc_datetime(datetime),
            Self::ElAaiun => El_Aaiun.from_utc_datetime(datetime),
            Self::Freetown => Freetown.from_utc_datetime(datetime),
            Self::Gaborone => Gaborone.from_utc_datetime(datetime),
            Self::Harare => Harare.from_utc_datetime(datetime),
            Self::Johannesburg => Johannesburg.from_utc_datetime(datetime),
            Self::Juba => Juba.from_utc_datetime(datetime),
            Self::Kampala => Kampala.from_utc_datetime(datetime),
            Self::Khartoum => Khartoum.from_utc_datetime(datetime),
            Self::Kigali => Kigali.from_utc_datetime(datetime),
            Self::Kinshasa => Kinshasa.from_utc_datetime(datetime),
            Self::Lagos => Lagos.from_utc_datetime(datetime),
            Self::Libreville => Libreville.from_utc_datetime(datetime),
            Self::Lome => Lome.from_utc_datetime(datetime),
            Self::Luanda => Luanda.from_utc_datetime(datetime),
            Self::Lubumbashi => Lubumbashi.from_utc_datetime(datetime),
            Self::Lusaka => Lusaka.from_utc_datetime(datetime),
            Self::Malabo => Malabo.from_utc_datetime(datetime),
            Self::Maputo => Maputo.from_utc_datetime(datetime),
            Self::Maseru => Maseru.from_utc_datetime(datetime),
            Self::Mbabane => Mbabane.from_utc_datetime(datetime),
            Self::Mogadishu => Mogadishu.from_utc_datetime(datetime),
            Self::Monrovia => Monrovia.from_utc_datetime(datetime),
            Self::Nairobi => Nairobi.from_utc_datetime(datetime),
            Self::Ndjamena => Ndjamena.from_utc_datetime(datetime),
            Self::Niamey => Niamey.from_utc_datetime(datetime),
            Self::Nouakchott => Nouakchott.from_utc_datetime(datetime),
            Self::Ouagadougou => Ouagadougou.from_utc_datetime(datetime),
            Self::PortoNovo => PortoNovo.from_utc_datetime(datetime),
            Self::SaoTome => Sao_Tome.from_utc_datetime(datetime),
            Self::Timbuktu => Timbuktu.from_utc_datetime(datetime),
            Self::Tripoli => Tripoli.from_utc_datetime(datetime),
            Self::Tunis => Tunis.from_utc_datetime(datetime),
        };
        p.timezone()
            .offset_from_utc_date(&NaiveDate::from_ymd(
                datetime.year(),
                datetime.month(),
                datetime.day(),
            ))
            .fix()
    }
}