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