use anyhow::Result; use self::{day01::Day, template::DayTrait}; use thiserror::Error; pub use template::ResultType; mod day01; mod template; #[derive(Debug, Error)] pub enum TemplateError { #[error("Not a valid day number: {0}")] InvalidNumber(usize), } pub struct DayProvider { days: Vec>, } impl DayProvider { pub fn create() -> DayProvider { DayProvider { days: vec![Box::new(Day)], } } pub fn get_day(&self, day_num: usize) -> Result<&Box> { Ok(self .days .get(day_num - 1) .ok_or(TemplateError::InvalidNumber(day_num))?) } pub fn get_all_days(&self) -> &[Box] { &self.days } }