Skip to main content

zman_registry/
zman_registry.rs

1//! Example of using the zman registry (`ALL_ZMANIM` / `find_zman`) to look up
2//! zmanim by name and iterate over all of them
3
4use jiff::{Zoned, tz::TimeZone};
5use rust_zmanim::prelude::*;
6
7fn main() {
8    let jerusalem = TimeZone::get("Asia/Jerusalem").unwrap();
9    let today = Zoned::now().date();
10
11    // your location here
12    let kosel = GeoLocation::new(31.777, 35.234, 700.0, jerusalem).unwrap();
13    let czc = ComplexZmanimCalendar::new(kosel, today, UseElevation::No);
14
15    // look up a single zman by its method name
16    let entry = find_zman("sof_zman_shema_gra").unwrap();
17    if let Some(ZmanValue::Time(time)) = (entry.compute)(&czc) {
18        println!("{}: {}\n", entry.name, time.strftime("%H:%M:%S %Z"));
19    }
20
21    // iterate over every zero-argument zman accessor
22    for entry in ALL_ZMANIM {
23        match (entry.compute)(&czc) {
24            Some(ZmanValue::Time(time)) => {
25                println!("{}: {}", entry.name, time.strftime("%H:%M:%S %Z"));
26            }
27            Some(ZmanValue::Duration(duration)) => println!("{}: {duration:#}", entry.name),
28            None => println!("{}: does not occur today", entry.name),
29        }
30    }
31}