misykat 4.1.2

Islamic library for Rust
Documentation
use jiff::civil::Weekday;

use crate::time::today;

// only obligatory prayer
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum Prayer {
    Fajr,
    Sherook,
    Dohr,
    Asr,
    Maghreb,
    Ishaa,
    FajrTomorrow,
}

impl Prayer {
    pub fn name(self) -> String {
        let prayer_name = match self {
            Self::Fajr | Prayer::FajrTomorrow => "Fajr",
            Self::Sherook => "Sherook",
            Self::Dohr => {
                if today().weekday() == Weekday::Friday {
                    "Jumua"
                } else {
                    "Dohr"
                }
            }
            Self::Asr => "Asr",
            Self::Maghreb => "Maghreb",
            Self::Ishaa => "Ishaa",
        };
        prayer_name.to_string()
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn prayer_name() -> Result<(), crate::Error> {
        assert_eq!(Prayer::Fajr.name(), "Fajr");
        assert_eq!(Prayer::Sherook.name(), "Sherook");

        if today().weekday() == Weekday::Friday {
            assert_eq!(Prayer::Dohr.name(), "Jumua");
        } else {
            assert_eq!(Prayer::Dohr.name(), "Dohr");
        }

        assert_eq!(Prayer::Asr.name(), "Asr");
        assert_eq!(Prayer::Maghreb.name(), "Maghreb");
        assert_eq!(Prayer::Ishaa.name(), "Ishaa");

        Ok(())
    }
}