1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
use crate::prelude::tz::TimeZone; use crate::prelude::Zmanim; use chrono::prelude::*; pub mod prelude; #[must_use] pub fn get( zmanim: &Zmanim, latitude: f64, longitude: f64, date: NaiveDate, time_zone: &TimeZone, ) -> Option<DateTime<FixedOffset>> { let (sunrise, sunset) = sunrise::sunrise_sunset(latitude, longitude, date.year(), date.month(), date.day()); let naive_sunrise = NaiveDateTime::from_timestamp_opt(sunrise, 0)?; let naive_sunset = NaiveDateTime::from_timestamp_opt(sunset, 0)?; let fixed_offset_sunrise = time_zone.get_tz(&naive_sunrise); let fixed_offset_sunset = time_zone.get_tz(&naive_sunset); let sunrise = DateTime::<FixedOffset>::from_utc(naive_sunrise, fixed_offset_sunrise); let sunset = DateTime::<FixedOffset>::from_utc(naive_sunset, fixed_offset_sunset); Some(match zmanim { Zmanim::Sunrise => sunrise, Zmanim::Sunset => sunset, _ => unreachable!(), }) }