zmanim/
lib.rs

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}