Skip to main content

use_calendar/
lib.rs

1#![forbid(unsafe_code)]
2//! Thin facade for the `use-calendar` workspace.
3//!
4//! The crate reexports the focused calendar crates directly so consumers can
5//! opt into one dependency while still using the smaller APIs.
6//!
7//! # Examples
8//!
9//! ```rust
10//! use use_calendar::*;
11//!
12//! let start = CalendarDate::new(2024, 1, 31).unwrap();
13//! let quarter = quarter_for_month(start.month()).unwrap();
14//! let dates = recurring_dates(start, RecurrenceFrequency::Monthly, 1, 3).unwrap();
15//!
16//! assert_eq!(quarter, Quarter::Q1);
17//! assert_eq!(dates[1], CalendarDate::new(2024, 2, 29).unwrap());
18//! assert!(is_business_day(CalendarDate::new(2024, 2, 29).unwrap()));
19//! ```
20
21pub use use_business_day;
22pub use use_business_day::*;
23pub use use_date;
24pub use use_date::*;
25pub use use_date_range;
26pub use use_date_range::*;
27pub use use_month;
28pub use use_month::*;
29pub use use_quarter;
30pub use use_quarter::*;
31pub use use_recurrence;
32pub use use_recurrence::*;
33pub use use_weekday;
34pub use use_weekday::*;
35pub use use_year;
36pub use use_year::*;
37
38#[cfg(test)]
39mod tests {
40    use super::{
41        adjust_business_day, business_days_between, date_range, quarter_for_month, recurring_dates,
42        BusinessDayConvention, CalendarDate, Quarter, RecurrenceFrequency,
43    };
44
45    #[test]
46    fn facade_reexports_workspace_apis() {
47        let start = CalendarDate::new(2024, 1, 31).unwrap();
48        let dates = recurring_dates(start, RecurrenceFrequency::Monthly, 1, 3).unwrap();
49        let range = date_range(start, CalendarDate::new(2024, 2, 2).unwrap()).unwrap();
50
51        assert_eq!(quarter_for_month(start.month()).unwrap(), Quarter::Q1);
52        assert_eq!(dates[1], CalendarDate::new(2024, 2, 29).unwrap());
53        assert_eq!(range.len(), 3);
54        assert_eq!(
55            business_days_between(start, CalendarDate::new(2024, 2, 2).unwrap()).unwrap(),
56            3
57        );
58        assert_eq!(
59            adjust_business_day(
60                CalendarDate::new(2024, 2, 3).unwrap(),
61                BusinessDayConvention::Following
62            ),
63            CalendarDate::new(2024, 2, 5).unwrap()
64        );
65    }
66}