Skip to main content

limudim_calendar/
lib.rs

1//! # Limudim - Jewish Learning Schedule Calculator
2//!
3//! This library provides calculators for various Jewish learning schedules including:
4//! - Daf Yomi Bavli (Babylonian Talmud daily page)
5//! - Daf Yomi Yerushalmi (Jerusalem Talmud daily page)
6//! - Amud Yomi Bavli Dirshu (Babylonian Talmud daily column - Dirshu schedule)
7//! - Daf Hashavua Bavli (Babylonian Talmud weekly page)
8//! - Mishna Yomis (Daily Mishna)
9//! - Pirkei Avos (Ethics of the Fathers - seasonal schedule)
10//! - Tehillim Monthly (Monthly Psalms reading)
11//!
12//! ## Example
13//! ```
14//! use limudim_calendar::{DafYomiBavli, LimudCalculator};
15//! use icu_calendar::{cal::Hebrew, Date};
16//! use limudim_calendar::LimudCalendar;
17//!
18//! let date = Date::try_new_iso(2020, 1, 5).unwrap().to_calendar(Hebrew);
19//! let daf = date.limud(DafYomiBavli::default());
20//! ```
21
22#![no_std]
23#![warn(missing_docs)]
24
25use icu_calendar::{cal::Hebrew, Date};
26
27mod amud_yomi_bavli_dirshu;
28mod constants;
29mod cycle;
30mod daf_hashavua_bavli;
31mod daf_yomi_bavli;
32mod daf_yomi_yerushalmi;
33mod date;
34mod interval;
35mod limud_calculator;
36mod mishna_yomis;
37mod pirkei_avos;
38mod tehillim_monthly;
39mod units;
40
41/// Extension trait for Hebrew dates to calculate limud schedules.
42///
43/// This trait extends `Date<Hebrew>` with the ability to calculate
44/// what should be learned on any given date according to various
45/// Jewish learning schedules.
46pub trait LimudCalendar {
47    /// Calculate the limud (learning unit) for this date using the given calculator.
48    ///
49    /// # Arguments
50    /// * `limud_calculator` - A calculator implementing the `LimudCalculator` trait
51    ///
52    /// # Returns
53    /// The learning unit for this date, or `None` if no learning is scheduled
54    fn limud<T>(&self, limud_calculator: impl LimudCalculator<T>) -> Option<T>;
55}
56impl LimudCalendar for Date<Hebrew> {
57    fn limud<T>(&self, limud_calculator: impl LimudCalculator<T>) -> Option<T> {
58        limud_calculator.limud(*self)
59    }
60}
61// Calculators
62pub use amud_yomi_bavli_dirshu::AmudYomiBavliDirshu;
63pub use daf_hashavua_bavli::DafHashavuaBavli;
64pub use daf_yomi_bavli::DafYomiBavli;
65pub use daf_yomi_yerushalmi::DafYomiYerushalmiVilna;
66pub use mishna_yomis::{MishnaYomis, Mishnas};
67pub use pirkei_avos::{PirkeiAvos, PirkeiAvosUnit};
68pub use tehillim_monthly::{TehillimMonthly, TehillimUnit};
69
70// Unit types
71pub use units::{Amud, Daf, Mishna, Side, Tractate};
72
73// Traits
74pub use limud_calculator::LimudCalculator;