use chrono::NaiveDate;
use crate::co2e::CradleToGateRuleset;
use crate::repairability::thresholds::{
DisplaysRuleset, LaptopRuleset, RepairabilityRuleset, SimplifiedRepairabilityHeuristic,
WashingMachineRuleset,
};
use crate::ruleset::Ruleset;
pub fn all_rulesets() -> &'static [&'static dyn Ruleset] {
&[
&SimplifiedRepairabilityHeuristic,
&LaptopRuleset,
&DisplaysRuleset,
&WashingMachineRuleset,
&CradleToGateRuleset,
]
}
pub fn resolve_repairability(
product_category: &str,
on_date: NaiveDate,
) -> Option<&'static dyn RepairabilityRuleset> {
let all: &[(&str, &dyn RepairabilityRuleset)] = &[
("smartphone-tablet", &SimplifiedRepairabilityHeuristic),
("laptop", &LaptopRuleset),
("displays", &DisplaysRuleset),
("washing-machine", &WashingMachineRuleset),
];
all.iter()
.filter(|(cat, _)| *cat == product_category)
.filter(|(_, r)| r.effective_dates().is_active_on(on_date))
.map(|(_, r)| *r)
.next()
}