Skip to main content

basic/
basic.rs

1//! jpholiday の基本的な使い方を示すサンプル。
2//!
3//! 実行: `cargo run --example basic`
4
5use jpholiday::{Date, JPHoliday, OriginalHolidayChecker};
6
7fn main() {
8    // --- 関数 API ---
9    let new_year = Date::new(2017, 1, 1).unwrap();
10    println!("{new_year} は祝日? {}", jpholiday::is_holiday(new_year));
11    println!(
12        "{} の祝日名: {:?}",
13        Date::new(2017, 1, 2).unwrap(),
14        jpholiday::is_holiday_name(Date::new(2017, 1, 2).unwrap())
15    );
16
17    println!("\n2017 年の祝日一覧:");
18    for (date, name) in jpholiday::year_holidays(2017) {
19        println!("  {date}  {name}");
20    }
21
22    println!("\n2017 年 5 月の祝日:");
23    for (date, name) in jpholiday::month_holidays(2017, 5) {
24        println!("  {date}  {name}");
25    }
26
27    println!("\nゴールデンウィーク (2017-05-01 〜 2017-05-05):");
28    for (date, name) in jpholiday::between(
29        Date::new(2017, 5, 1).unwrap(),
30        Date::new(2017, 5, 5).unwrap(),
31    ) {
32        println!("  {date}  {name}");
33    }
34
35    // --- クラス API ---
36    let jp = JPHoliday::new();
37    let holidays = jp.holidays(Date::new(2020, 1, 1).unwrap());
38    println!("\nクラス API: {:?}", holidays);
39
40    // --- 独自祝日 ---
41    struct CompanyHoliday;
42    impl OriginalHolidayChecker for CompanyHoliday {
43        fn is_holiday(&self, date: Date) -> bool {
44            date == Date::new(2020, 2, 9).unwrap()
45        }
46        fn holiday_name(&self, _date: Date) -> String {
47            "特別休暇".to_string()
48        }
49    }
50
51    let mut jp = JPHoliday::new();
52    jp.register(CompanyHoliday);
53    let special = Date::new(2020, 2, 9).unwrap();
54    println!(
55        "\n独自祝日を登録: {} -> {:?}",
56        special,
57        jp.is_holiday_name(special)
58    );
59    jp.unregister::<CompanyHoliday>();
60    println!(
61        "登録解除後: {} -> {:?}",
62        special,
63        jp.is_holiday_name(special)
64    );
65}