use crate::YearDataset;
use chrono::NaiveDate;
use std::sync::LazyLock;
pub(crate) fn all_datasets() -> &'static [YearDataset] {
static DATASETS: LazyLock<Vec<YearDataset>> = LazyLock::new(|| vec![ds_2024(), ds_2025()]);
&DATASETS[..]
}
pub(crate) fn nd(y: i32, m: u32, d: u32) -> NaiveDate {
NaiveDate::from_ymd_opt(y, m, d).expect("invalid date in dataset")
}
fn ds_2025() -> YearDataset {
YearDataset {
year: 2025,
effective_from: nd(2025, 10, 1),
rates: vec![
(1, nd(2025, 10, 4), 1075), (2, nd(2025, 11, 21), 1029), (3, nd(2025, 12, 1), 1031), (4, nd(2025, 10, 4), 1038), (5, nd(2026, 3, 31), 1031), (6, nd(2025, 12, 23), 1032), (7, nd(2026, 1, 1), 1033), (8, nd(2025, 10, 12), 1074), (9, nd(2025, 10, 1), 1068), (10, nd(2026, 3, 1), 1063), (11, nd(2025, 11, 1), 1141), (12, nd(2025, 10, 3), 1140), (13, nd(2025, 10, 3), 1226), (14, nd(2025, 10, 4), 1225), (15, nd(2025, 10, 2), 1050), (16, nd(2025, 10, 12), 1062), (17, nd(2025, 10, 8), 1054), (18, nd(2025, 10, 8), 1053), (19, nd(2025, 12, 1), 1052), (20, nd(2025, 10, 3), 1061), (21, nd(2025, 10, 18), 1065), (22, nd(2025, 11, 1), 1097), (23, nd(2025, 10, 18), 1140), (24, nd(2025, 11, 21), 1087), (25, nd(2025, 10, 5), 1080), (26, nd(2025, 11, 21), 1122), (27, nd(2025, 10, 16), 1177), (28, nd(2025, 10, 4), 1116), (29, nd(2025, 11, 16), 1051), (30, nd(2025, 11, 1), 1045), (31, nd(2025, 10, 4), 1030), (32, nd(2025, 11, 17), 1033), (33, nd(2025, 12, 1), 1047), (34, nd(2025, 11, 1), 1085), (35, nd(2025, 10, 16), 1043), (36, nd(2026, 1, 1), 1046), (37, nd(2025, 10, 18), 1036), (38, nd(2025, 12, 1), 1033), (39, nd(2025, 12, 1), 1023), (40, nd(2025, 11, 16), 1057), (41, nd(2025, 11, 21), 1030), (42, nd(2025, 12, 1), 1031), (43, nd(2026, 1, 1), 1034), (44, nd(2026, 1, 1), 1035), (45, nd(2025, 11, 16), 1023), (46, nd(2025, 11, 1), 1026), (47, nd(2025, 12, 1), 1023), ],
}
}
fn ds_2024() -> YearDataset {
YearDataset {
year: 2024,
effective_from: nd(2024, 10, 1),
rates: vec![
(1, nd(2024, 10, 1), 1010), (2, nd(2024, 10, 5), 953), (3, nd(2024, 10, 27), 952), (4, nd(2024, 10, 1), 973), (5, nd(2024, 10, 1), 951), (6, nd(2024, 10, 19), 955), (7, nd(2024, 10, 5), 955), (8, nd(2024, 10, 1), 1005), (9, nd(2024, 10, 1), 1004), (10, nd(2024, 10, 4), 985), (11, nd(2024, 10, 1), 1078), (12, nd(2024, 10, 1), 1076), (13, nd(2024, 10, 1), 1163), (14, nd(2024, 10, 1), 1162), (15, nd(2024, 10, 1), 985), (16, nd(2024, 10, 1), 998), (17, nd(2024, 10, 5), 984), (18, nd(2024, 10, 5), 984), (19, nd(2024, 10, 1), 988), (20, nd(2024, 10, 1), 998), (21, nd(2024, 10, 1), 1001), (22, nd(2024, 10, 1), 1034), (23, nd(2024, 10, 1), 1077), (24, nd(2024, 10, 1), 1023), (25, nd(2024, 10, 1), 1017), (26, nd(2024, 10, 1), 1058), (27, nd(2024, 10, 1), 1114), (28, nd(2024, 10, 1), 1052), (29, nd(2024, 10, 1), 986), (30, nd(2024, 10, 1), 980), (31, nd(2024, 10, 5), 957), (32, nd(2024, 10, 12), 962), (33, nd(2024, 10, 2), 982), (34, nd(2024, 10, 1), 1020), (35, nd(2024, 10, 1), 979), (36, nd(2024, 11, 1), 980), (37, nd(2024, 10, 2), 970), (38, nd(2024, 10, 13), 956), (39, nd(2024, 10, 9), 952), (40, nd(2024, 10, 5), 992), (41, nd(2024, 10, 17), 956), (42, nd(2024, 10, 12), 953), (43, nd(2024, 10, 5), 952), (44, nd(2024, 10, 5), 954), (45, nd(2024, 10, 5), 952), (46, nd(2024, 10, 5), 953), (47, nd(2024, 10, 9), 952), ],
}
}