use crate::holidays::Holiday;
#[allow(missing_docs)]
pub enum Region {
BadenWuerttemberg,
Bayern,
BayernAugsburg,
BayernCatholic,
BayernProtestant,
Berlin,
Brandenburg,
Bremen,
Hamburg,
Hessen,
MecklenburgVorpommern,
Niedersachsen,
NordrheinWestfalen,
RheinlandPfalz,
Saarland,
Sachsen,
SachsenCatholic,
SachsenProtestant,
SachsenAnhalt,
SchleswigHolstein,
Thueringen,
ThueringenCatholic,
ThueringenProtestant,
}
impl Region {
pub fn is_holiday(&self, date: time::Date) -> bool {
let holidays = self.holidays();
let year = date.year();
for holiday in holidays {
if let Some(holiday) = holiday.date(year) {
if date == holiday {
return true;
}
}
}
false
}
pub fn holidays(&self) -> Vec<Holiday> {
let mut holidays = match self {
Region::BadenWuerttemberg => Vec::from([
Holiday::HeiligeDreiKoenige,
Holiday::Fronleichnam,
Holiday::Allerheiligen,
]),
Region::Bayern => Vec::from([
Holiday::HeiligeDreiKoenige,
Holiday::Fronleichnam,
Holiday::MariaeHimmelfahrt,
Holiday::Allerheiligen,
]),
Region::BayernAugsburg => Vec::from([
Holiday::HeiligeDreiKoenige,
Holiday::Fronleichnam,
Holiday::AugsburgerFriedensfest,
Holiday::MariaeHimmelfahrt,
Holiday::Allerheiligen,
]),
Region::BayernCatholic => Vec::from([
Holiday::HeiligeDreiKoenige,
Holiday::Fronleichnam,
Holiday::MariaeHimmelfahrt,
Holiday::Allerheiligen,
]),
Region::BayernProtestant => Vec::from([
Holiday::HeiligeDreiKoenige,
Holiday::Fronleichnam,
Holiday::MariaeHimmelfahrt,
]),
Region::Berlin => Vec::from([Holiday::Frauentag]),
Region::Brandenburg => Vec::from([Holiday::Reformationstag]),
Region::Bremen => Vec::from([Holiday::Reformationstag]),
Region::Hamburg => Vec::from([Holiday::Reformationstag]),
Region::Hessen => Vec::from([Holiday::Fronleichnam]),
Region::MecklenburgVorpommern => {
Vec::from([Holiday::Frauentag, Holiday::Reformationstag])
}
Region::Niedersachsen => Vec::from([Holiday::Reformationstag]),
Region::NordrheinWestfalen => {
Vec::from([Holiday::Fronleichnam, Holiday::Allerheiligen])
}
Region::RheinlandPfalz => Vec::from([Holiday::Fronleichnam, Holiday::Allerheiligen]),
Region::Saarland => Vec::from([
Holiday::Fronleichnam,
Holiday::MariaeHimmelfahrt,
Holiday::Allerheiligen,
]),
Region::Sachsen => Vec::from([Holiday::Reformationstag, Holiday::BussUndBettag]),
Region::SachsenCatholic => Vec::from([
Holiday::Reformationstag,
Holiday::Fronleichnam,
Holiday::BussUndBettag,
]),
Region::SachsenProtestant => {
Vec::from([Holiday::Reformationstag, Holiday::BussUndBettag])
}
Region::SachsenAnhalt => {
Vec::from([Holiday::HeiligeDreiKoenige, Holiday::Reformationstag])
}
Region::SchleswigHolstein => Vec::from([Holiday::Reformationstag]),
Region::Thueringen => Vec::from([Holiday::Weltkindertag, Holiday::Reformationstag]),
Region::ThueringenCatholic => {
Vec::from([Holiday::Fronleichnam, Holiday::Reformationstag])
}
Region::ThueringenProtestant => Vec::from([Holiday::Reformationstag]),
};
holidays.extend_from_slice(NATION_WIDE_HOLIDAYS);
holidays
}
}
pub const NATION_WIDE_HOLIDAYS: &[Holiday] = &[
Holiday::Neujahr,
Holiday::Karfreitag,
Holiday::Ostermontag,
Holiday::TagDerArbeit,
Holiday::ChristiHimmelfahrt,
Holiday::Pfingstmontag,
Holiday::TagDerDeutschenEinheit,
Holiday::ErsterWeihnachtsfeiertag,
Holiday::ZweiterWeihnachtsfeiertag,
];