use icu_calendar::types::Weekday;
use icu_calendar::{Date, cal::Hebrew};
use num_enum::{IntoPrimitive, TryFromPrimitive};
use super::HebrewCalendar;
use super::get_hebrew_elapsed_days;
pub(super) type ParshaList = [Option<Parsha>; 56];
pub(super) static PARSHA_LIST_0: ParshaList = [
None,
Some(Parsha::Vayeilech),
Some(Parsha::HaAzinu),
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::VayakhelPekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
None,
Some(Parsha::Shmini),
Some(Parsha::TazriaMetzora),
Some(Parsha::AchreiMosKedoshim),
Some(Parsha::Emor),
Some(Parsha::BeharBechukosai),
Some(Parsha::Bamidbar),
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::Chukas),
Some(Parsha::Balak),
Some(Parsha::Pinchas),
Some(Parsha::MatosMasei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::NitzavimVayeilech),
None,
None,
None,
None,
None,
];
pub(crate) static PARSHA_LIST_1: ParshaList = [
None,
Some(Parsha::Vayeilech),
Some(Parsha::HaAzinu),
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::VayakhelPekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
None,
Some(Parsha::Shmini),
Some(Parsha::TazriaMetzora),
Some(Parsha::AchreiMosKedoshim),
Some(Parsha::Emor),
Some(Parsha::BeharBechukosai),
Some(Parsha::Bamidbar),
None,
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::ChukasBalak),
Some(Parsha::Pinchas),
Some(Parsha::MatosMasei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::NitzavimVayeilech),
None,
None,
None,
None,
None,
];
pub(crate) static PARSHA_LIST_2: ParshaList = [
None,
Some(Parsha::HaAzinu),
None,
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::VayakhelPekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
None,
None,
Some(Parsha::Shmini),
Some(Parsha::TazriaMetzora),
Some(Parsha::AchreiMosKedoshim),
Some(Parsha::Emor),
Some(Parsha::BeharBechukosai),
Some(Parsha::Bamidbar),
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::Chukas),
Some(Parsha::Balak),
Some(Parsha::Pinchas),
Some(Parsha::MatosMasei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::Nitzavim),
None,
None,
None,
None,
];
pub(crate) static PARSHA_LIST_3: ParshaList = [
None,
Some(Parsha::HaAzinu),
None,
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::Vayakhel),
Some(Parsha::Pekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
None,
Some(Parsha::Shmini),
Some(Parsha::TazriaMetzora),
Some(Parsha::AchreiMosKedoshim),
Some(Parsha::Emor),
Some(Parsha::BeharBechukosai),
Some(Parsha::Bamidbar),
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::Chukas),
Some(Parsha::Balak),
Some(Parsha::Pinchas),
Some(Parsha::MatosMasei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::Nitzavim),
None,
None,
None,
None,
];
pub(crate) static PARSHA_LIST_4: ParshaList = [
None,
None,
Some(Parsha::HaAzinu),
None,
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::VayakhelPekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
None,
Some(Parsha::Shmini),
Some(Parsha::TazriaMetzora),
Some(Parsha::AchreiMosKedoshim),
Some(Parsha::Emor),
Some(Parsha::BeharBechukosai),
Some(Parsha::Bamidbar),
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::Chukas),
Some(Parsha::Balak),
Some(Parsha::Pinchas),
Some(Parsha::MatosMasei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::Nitzavim),
None,
None,
None,
None,
];
pub(crate) static PARSHA_LIST_5: ParshaList = [
None,
None,
Some(Parsha::HaAzinu),
None,
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::VayakhelPekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
None,
Some(Parsha::Shmini),
Some(Parsha::TazriaMetzora),
Some(Parsha::AchreiMosKedoshim),
Some(Parsha::Emor),
Some(Parsha::BeharBechukosai),
Some(Parsha::Bamidbar),
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::Chukas),
Some(Parsha::Balak),
Some(Parsha::Pinchas),
Some(Parsha::MatosMasei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::NitzavimVayeilech),
None,
None,
None,
None,
];
pub(crate) static PARSHA_LIST_6: ParshaList = [
None,
Some(Parsha::Vayeilech),
Some(Parsha::HaAzinu),
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::Vayakhel),
Some(Parsha::Pekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
Some(Parsha::Shmini),
Some(Parsha::Tazria),
Some(Parsha::Metzora),
None,
Some(Parsha::AchreiMos),
Some(Parsha::Kedoshim),
Some(Parsha::Emor),
Some(Parsha::Behar),
Some(Parsha::Bechukosai),
Some(Parsha::Bamidbar),
None,
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::ChukasBalak),
Some(Parsha::Pinchas),
Some(Parsha::MatosMasei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::NitzavimVayeilech),
None,
];
pub(crate) static PARSHA_LIST_7: ParshaList = [
None,
Some(Parsha::Vayeilech),
Some(Parsha::HaAzinu),
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::Vayakhel),
Some(Parsha::Pekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
Some(Parsha::Shmini),
Some(Parsha::Tazria),
Some(Parsha::Metzora),
None,
None,
Some(Parsha::AchreiMos),
Some(Parsha::Kedoshim),
Some(Parsha::Emor),
Some(Parsha::Behar),
Some(Parsha::Bechukosai),
Some(Parsha::Bamidbar),
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::Chukas),
Some(Parsha::Balak),
Some(Parsha::Pinchas),
Some(Parsha::MatosMasei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::Nitzavim),
];
pub(crate) static PARSHA_LIST_8: ParshaList = [
None,
Some(Parsha::HaAzinu),
None,
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::Vayakhel),
Some(Parsha::Pekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
Some(Parsha::Shmini),
Some(Parsha::Tazria),
Some(Parsha::Metzora),
Some(Parsha::AchreiMos),
None,
Some(Parsha::Kedoshim),
Some(Parsha::Emor),
Some(Parsha::Behar),
Some(Parsha::Bechukosai),
Some(Parsha::Bamidbar),
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::Chukas),
Some(Parsha::Balak),
Some(Parsha::Pinchas),
Some(Parsha::Matos),
Some(Parsha::Masei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::Nitzavim),
];
pub(crate) static PARSHA_LIST_9: ParshaList = [
None,
Some(Parsha::HaAzinu),
None,
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::Vayakhel),
Some(Parsha::Pekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
Some(Parsha::Shmini),
Some(Parsha::Tazria),
Some(Parsha::Metzora),
Some(Parsha::AchreiMos),
None,
Some(Parsha::Kedoshim),
Some(Parsha::Emor),
Some(Parsha::Behar),
Some(Parsha::Bechukosai),
Some(Parsha::Bamidbar),
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::Chukas),
Some(Parsha::Balak),
Some(Parsha::Pinchas),
Some(Parsha::Matos),
Some(Parsha::Masei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::NitzavimVayeilech),
];
pub(crate) static PARSHA_LIST_10: ParshaList = [
None,
None,
Some(Parsha::HaAzinu),
None,
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::Vayakhel),
Some(Parsha::Pekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
Some(Parsha::Shmini),
Some(Parsha::Tazria),
Some(Parsha::Metzora),
None,
Some(Parsha::AchreiMos),
Some(Parsha::Kedoshim),
Some(Parsha::Emor),
Some(Parsha::Behar),
Some(Parsha::Bechukosai),
Some(Parsha::Bamidbar),
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::Chukas),
Some(Parsha::Balak),
Some(Parsha::Pinchas),
Some(Parsha::MatosMasei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::NitzavimVayeilech),
];
pub(crate) static PARSHA_LIST_11: ParshaList = [
None,
None,
Some(Parsha::HaAzinu),
None,
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::Vayakhel),
Some(Parsha::Pekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
Some(Parsha::Shmini),
Some(Parsha::Tazria),
Some(Parsha::Metzora),
None,
Some(Parsha::AchreiMos),
Some(Parsha::Kedoshim),
Some(Parsha::Emor),
Some(Parsha::Behar),
Some(Parsha::Bechukosai),
Some(Parsha::Bamidbar),
None,
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::ChukasBalak),
Some(Parsha::Pinchas),
Some(Parsha::MatosMasei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::NitzavimVayeilech),
];
pub(crate) static PARSHA_LIST_12: ParshaList = [
None,
Some(Parsha::Vayeilech),
Some(Parsha::HaAzinu),
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::VayakhelPekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
None,
Some(Parsha::Shmini),
Some(Parsha::TazriaMetzora),
Some(Parsha::AchreiMosKedoshim),
Some(Parsha::Emor),
Some(Parsha::BeharBechukosai),
Some(Parsha::Bamidbar),
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::Chukas),
Some(Parsha::Balak),
Some(Parsha::Pinchas),
Some(Parsha::MatosMasei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::NitzavimVayeilech),
None,
None,
None,
None,
None,
];
pub(crate) static PARSHA_LIST_13: ParshaList = [
None,
Some(Parsha::HaAzinu),
None,
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::VayakhelPekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
None,
Some(Parsha::Shmini),
Some(Parsha::TazriaMetzora),
Some(Parsha::AchreiMosKedoshim),
Some(Parsha::Emor),
Some(Parsha::Behar),
Some(Parsha::Bechukosai),
Some(Parsha::Bamidbar),
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::Chukas),
Some(Parsha::Balak),
Some(Parsha::Pinchas),
Some(Parsha::MatosMasei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::Nitzavim),
None,
None,
None,
None,
];
pub(crate) static PARSHA_LIST_14: ParshaList = [
None,
Some(Parsha::Vayeilech),
Some(Parsha::HaAzinu),
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::Vayakhel),
Some(Parsha::Pekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
Some(Parsha::Shmini),
Some(Parsha::Tazria),
Some(Parsha::Metzora),
None,
Some(Parsha::AchreiMos),
Some(Parsha::Kedoshim),
Some(Parsha::Emor),
Some(Parsha::Behar),
Some(Parsha::Bechukosai),
Some(Parsha::Bamidbar),
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::Chukas),
Some(Parsha::Balak),
Some(Parsha::Pinchas),
Some(Parsha::MatosMasei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::NitzavimVayeilech),
None,
];
pub(crate) static PARSHA_LIST_15: ParshaList = [
None,
Some(Parsha::Vayeilech),
Some(Parsha::HaAzinu),
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::Vayakhel),
Some(Parsha::Pekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
Some(Parsha::Shmini),
Some(Parsha::Tazria),
Some(Parsha::Metzora),
None,
Some(Parsha::AchreiMos),
Some(Parsha::Kedoshim),
Some(Parsha::Emor),
Some(Parsha::Behar),
Some(Parsha::Bechukosai),
Some(Parsha::Bamidbar),
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::Chukas),
Some(Parsha::Balak),
Some(Parsha::Pinchas),
Some(Parsha::Matos),
Some(Parsha::Masei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::Nitzavim),
];
pub(crate) static PARSHA_LIST_16: ParshaList = [
None,
None,
Some(Parsha::HaAzinu),
None,
None,
Some(Parsha::Bereshis),
Some(Parsha::Noach),
Some(Parsha::LechLecha),
Some(Parsha::Vayera),
Some(Parsha::ChayeiSara),
Some(Parsha::Toldos),
Some(Parsha::Vayetzei),
Some(Parsha::Vayishlach),
Some(Parsha::Vayeshev),
Some(Parsha::Miketz),
Some(Parsha::Vayigash),
Some(Parsha::Vayechi),
Some(Parsha::Shemos),
Some(Parsha::Vaera),
Some(Parsha::Bo),
Some(Parsha::Beshalach),
Some(Parsha::Yisro),
Some(Parsha::Mishpatim),
Some(Parsha::Terumah),
Some(Parsha::Tetzaveh),
Some(Parsha::KiSisa),
Some(Parsha::Vayakhel),
Some(Parsha::Pekudei),
Some(Parsha::Vayikra),
Some(Parsha::Tzav),
Some(Parsha::Shmini),
Some(Parsha::Tazria),
Some(Parsha::Metzora),
None,
Some(Parsha::AchreiMos),
Some(Parsha::Kedoshim),
Some(Parsha::Emor),
Some(Parsha::Behar),
Some(Parsha::Bechukosai),
Some(Parsha::Bamidbar),
Some(Parsha::Nasso),
Some(Parsha::Behaaloscha),
Some(Parsha::Shlach),
Some(Parsha::Korach),
Some(Parsha::Chukas),
Some(Parsha::Balak),
Some(Parsha::Pinchas),
Some(Parsha::MatosMasei),
Some(Parsha::Devarim),
Some(Parsha::Vaeschanan),
Some(Parsha::Eikev),
Some(Parsha::Reeh),
Some(Parsha::Shoftim),
Some(Parsha::KiSeitzei),
Some(Parsha::KiSavo),
Some(Parsha::NitzavimVayeilech),
];
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Debug, PartialEq, Eq, Clone, Copy, IntoPrimitive, TryFromPrimitive)]
#[repr(u8)]
#[allow(missing_docs)]
pub enum Parsha {
Bereshis = 0,
Noach = 1,
LechLecha = 2,
Vayera = 3,
ChayeiSara = 4,
Toldos = 5,
Vayetzei = 6,
Vayishlach = 7,
Vayeshev = 8,
Miketz = 9,
Vayigash = 10,
Vayechi = 11,
Shemos = 12,
Vaera = 13,
Bo = 14,
Beshalach = 15,
Yisro = 16,
Mishpatim = 17,
Terumah = 18,
Tetzaveh = 19,
KiSisa = 20,
Vayakhel = 21,
Pekudei = 22,
Vayikra = 23,
Tzav = 24,
Shmini = 25,
Tazria = 26,
Metzora = 27,
AchreiMos = 28,
Kedoshim = 29,
Emor = 30,
Behar = 31,
Bechukosai = 32,
Bamidbar = 33,
Nasso = 34,
Behaaloscha = 35,
Shlach = 36,
Korach = 37,
Chukas = 38,
Balak = 39,
Pinchas = 40,
Matos = 41,
Masei = 42,
Devarim = 43,
Vaeschanan = 44,
Eikev = 45,
Reeh = 46,
Shoftim = 47,
KiSeitzei = 48,
KiSavo = 49,
Nitzavim = 50,
Vayeilech = 51,
HaAzinu = 52,
VezosHabracha = 53,
VayakhelPekudei = 54,
TazriaMetzora = 55,
AchreiMosKedoshim = 56,
BeharBechukosai = 57,
ChukasBalak = 58,
MatosMasei = 59,
NitzavimVayeilech = 60,
Shekalim = 61,
Zachor = 62,
Parah = 63,
Hachodesh = 64,
Shuva = 65,
Shira = 66,
Hagadol = 67,
Chazon = 68,
Nachamu = 69,
}
impl Parsha {
pub fn he(&self) -> &str {
match self {
Parsha::Bereshis => "בראשית",
Parsha::Noach => "נח",
Parsha::LechLecha => "לך לך",
Parsha::Vayera => "וירא",
Parsha::ChayeiSara => "חיי שרה",
Parsha::Toldos => "תולדות",
Parsha::Vayetzei => "ויצא",
Parsha::Vayishlach => "וישלח",
Parsha::Vayeshev => "וישב",
Parsha::Miketz => "מקץ",
Parsha::Vayigash => "ויגש",
Parsha::Vayechi => "ויחי",
Parsha::Shemos => "שמות",
Parsha::Vaera => "וארא",
Parsha::Bo => "בא",
Parsha::Beshalach => "בשלח",
Parsha::Yisro => "יתרו",
Parsha::Mishpatim => "משפטים",
Parsha::Terumah => "תרומה",
Parsha::Tetzaveh => "תצוה",
Parsha::KiSisa => "כי תשא",
Parsha::Vayakhel => "ויקהל",
Parsha::Pekudei => "פקודי",
Parsha::Vayikra => "ויקרא",
Parsha::Tzav => "צו",
Parsha::Shmini => "שמיני",
Parsha::Tazria => "תזריע",
Parsha::Metzora => "מצרע",
Parsha::AchreiMos => "אחרי מות",
Parsha::Kedoshim => "קדושים",
Parsha::Emor => "אמור",
Parsha::Behar => "בהר",
Parsha::Bechukosai => "בחקתי",
Parsha::Bamidbar => "במדבר",
Parsha::Nasso => "נשא",
Parsha::Behaaloscha => "בהעלתך",
Parsha::Shlach => "שלח לך",
Parsha::Korach => "קרח",
Parsha::Chukas => "חוקת",
Parsha::Balak => "בלק",
Parsha::Pinchas => "פינחס",
Parsha::Matos => "מטות",
Parsha::Masei => "מסעי",
Parsha::Devarim => "דברים",
Parsha::Vaeschanan => "ואתחנן",
Parsha::Eikev => "עקב",
Parsha::Reeh => "ראה",
Parsha::Shoftim => "שופטים",
Parsha::KiSeitzei => "כי תצא",
Parsha::KiSavo => "כי תבוא",
Parsha::Nitzavim => "נצבים",
Parsha::Vayeilech => "וילך",
Parsha::HaAzinu => "האזינו",
Parsha::VezosHabracha => "וזאת הברכה",
Parsha::VayakhelPekudei => "ויקהל - פקודי",
Parsha::TazriaMetzora => "תזריע - מצרע",
Parsha::AchreiMosKedoshim => "אחרי מות - קדושים",
Parsha::BeharBechukosai => "בהר - בחקתי",
Parsha::ChukasBalak => "חוקת - בלק",
Parsha::MatosMasei => "מטות - מסעי",
Parsha::NitzavimVayeilech => "נצבים - וילך",
Parsha::Shekalim => "שקלים",
Parsha::Zachor => "זכור",
Parsha::Parah => "פרה",
Parsha::Hachodesh => "החדש",
Parsha::Shuva => "שובה",
Parsha::Shira => "שירה",
Parsha::Hagadol => "הגדול",
Parsha::Chazon => "חזון",
Parsha::Nachamu => "נחמו",
}
}
}
impl core::fmt::Display for Parsha {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "{}", self.he())
}
}
pub(crate) fn get_parsha_list(date: &Date<Hebrew>, in_israel: bool) -> Option<ParshaList> {
static ROSH_HASHANA_WEEKDAYS: [Weekday; 7] = [
Weekday::Saturday,
Weekday::Sunday,
Weekday::Monday,
Weekday::Tuesday,
Weekday::Wednesday,
Weekday::Thursday,
Weekday::Friday,
];
let rosh_hashana_day_of_week =
ROSH_HASHANA_WEEKDAYS[(get_hebrew_elapsed_days(date.year().extended_year())? + 1) as usize % 7];
let is_kislev_short = Hebrew::is_kislev_short(date.year().extended_year())?;
let is_cheshvan_long = Hebrew::is_cheshvan_long(date.year().extended_year())?;
if date.is_in_leap_year() {
match rosh_hashana_day_of_week {
Weekday::Monday => {
if is_kislev_short {
if in_israel {
Some(PARSHA_LIST_14)
} else {
Some(PARSHA_LIST_6)
}
} else if is_cheshvan_long {
if in_israel {
Some(PARSHA_LIST_15)
} else {
Some(PARSHA_LIST_7)
}
} else {
None
}
}
Weekday::Tuesday => {
if in_israel {
Some(PARSHA_LIST_15)
} else {
Some(PARSHA_LIST_7)
}
}
Weekday::Thursday => {
if is_kislev_short {
Some(PARSHA_LIST_8)
} else if is_cheshvan_long {
Some(PARSHA_LIST_9)
} else {
None
}
}
Weekday::Saturday => {
if is_kislev_short {
Some(PARSHA_LIST_10)
} else if is_cheshvan_long {
if in_israel {
Some(PARSHA_LIST_16)
} else {
Some(PARSHA_LIST_11)
}
} else {
None
}
}
_ => None,
}
} else {
match rosh_hashana_day_of_week {
Weekday::Monday => {
if is_kislev_short {
Some(PARSHA_LIST_0)
} else if is_cheshvan_long {
if in_israel {
Some(PARSHA_LIST_12)
} else {
Some(PARSHA_LIST_1)
}
} else {
None
}
}
Weekday::Tuesday => {
if in_israel {
Some(PARSHA_LIST_12)
} else {
Some(PARSHA_LIST_1)
}
}
Weekday::Thursday => {
if is_cheshvan_long {
Some(PARSHA_LIST_3)
} else if !is_kislev_short {
if in_israel {
Some(PARSHA_LIST_13)
} else {
Some(PARSHA_LIST_2)
}
} else {
None
}
}
Weekday::Saturday => {
if is_kislev_short {
Some(PARSHA_LIST_4)
} else if is_cheshvan_long {
Some(PARSHA_LIST_5)
} else {
None
}
}
_ => None,
}
}
}