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, 04), 1075), (2, nd(2025, 10, 01), 1029),
(3, nd(2025, 10, 01), 1031),
(4, nd(2025, 10, 01), 1038),
(5, nd(2025, 10, 01), 1031),
(6, nd(2025, 10, 01), 1032),
(7, nd(2025, 10, 01), 1033),
(8, nd(2025, 10, 05), 1074), (9, nd(2025, 10, 01), 1068),
(10, nd(2025, 10, 01), 1063),
(11, nd(2025, 10, 01), 1141),
(12, nd(2025, 10, 01), 1140),
(13, nd(2025, 10, 01), 1226),
(14, nd(2025, 10, 01), 1225),
(15, nd(2025, 10, 01), 1050),
(16, nd(2025, 10, 01), 1062),
(17, nd(2025, 10, 01), 1054),
(18, nd(2025, 10, 01), 1053),
(19, nd(2025, 10, 01), 1052),
(20, nd(2025, 10, 01), 1061),
(21, nd(2025, 10, 01), 1065),
(22, nd(2025, 10, 01), 1097),
(23, nd(2025, 10, 01), 1140),
(24, nd(2025, 10, 01), 1087),
(25, nd(2025, 10, 01), 1080),
(26, nd(2025, 10, 01), 1122),
(27, nd(2025, 10, 01), 1177),
(28, nd(2025, 10, 01), 1116),
(29, nd(2025, 10, 01), 1051),
(30, nd(2025, 10, 01), 1045),
(31, nd(2025, 10, 01), 1030),
(32, nd(2025, 10, 01), 1033),
(33, nd(2025, 10, 01), 1047),
(34, nd(2025, 10, 01), 1085),
(35, nd(2025, 10, 01), 1043),
(36, nd(2025, 10, 01), 1046),
(37, nd(2025, 10, 01), 1036),
(38, nd(2025, 10, 01), 1033),
(39, nd(2025, 10, 01), 1023),
(40, nd(2025, 10, 01), 1057),
(41, nd(2025, 10, 01), 1030),
(42, nd(2025, 10, 01), 1031),
(43, nd(2025, 10, 01), 1034),
(44, nd(2025, 10, 01), 1035),
(45, nd(2025, 10, 01), 1023),
(46, nd(2025, 10, 01), 1026),
(47, nd(2025, 10, 01), 1023),
],
}
}
fn ds_2024() -> YearDataset {
YearDataset {
year: 2024,
effective_from: nd(2024, 10, 1),
rates: vec![
(1, nd(2024, 10, 01), 1010),
(2, nd(2024, 10, 05), 953),
(3, nd(2024, 10, 27), 952),
(4, nd(2024, 10, 01), 973),
(5, nd(2024, 10, 01), 951),
(6, nd(2024, 10, 19), 955),
(7, nd(2024, 10, 05), 955),
(8, nd(2024, 10, 01), 1005),
(9, nd(2024, 10, 01), 1004),
(10, nd(2024, 10, 04), 985),
(11, nd(2024, 10, 01), 1078),
(12, nd(2024, 10, 01), 1076),
(13, nd(2024, 10, 01), 1163),
(14, nd(2024, 10, 01), 1162),
(15, nd(2024, 10, 01), 985),
(16, nd(2024, 10, 01), 998),
(17, nd(2024, 10, 05), 984),
(18, nd(2024, 10, 05), 984),
(19, nd(2024, 10, 01), 988),
(20, nd(2024, 10, 01), 998),
(21, nd(2024, 10, 01), 1001),
(22, nd(2024, 10, 01), 1034),
(23, nd(2024, 10, 01), 1077),
(24, nd(2024, 10, 01), 1023),
(25, nd(2024, 10, 01), 1017),
(26, nd(2024, 10, 01), 1058),
(27, nd(2024, 10, 01), 1114),
(28, nd(2024, 10, 01), 1052),
(29, nd(2024, 10, 01), 986),
(30, nd(2024, 10, 01), 980),
(31, nd(2024, 10, 05), 957),
(32, nd(2024, 10, 12), 962),
(33, nd(2024, 10, 02), 982),
(34, nd(2024, 10, 01), 1020),
(35, nd(2024, 10, 01), 979),
(36, nd(2024, 11, 01), 980),
(37, nd(2024, 10, 02), 970),
(38, nd(2024, 10, 13), 956),
(39, nd(2024, 10, 09), 952),
(40, nd(2024, 10, 05), 992),
(41, nd(2024, 10, 17), 956),
(42, nd(2024, 10, 12), 953),
(43, nd(2024, 10, 05), 952),
(44, nd(2024, 10, 05), 954),
(45, nd(2024, 10, 05), 952),
(46, nd(2024, 10, 05), 953),
(47, nd(2024, 10, 09), 952),
],
}
}