38 lines
752 B
Rust
38 lines
752 B
Rust
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<Box<dyn DayTrait>>,
|
|
}
|
|
|
|
impl DayProvider {
|
|
pub fn create() -> DayProvider {
|
|
DayProvider {
|
|
days: vec![Box::new(Day)],
|
|
}
|
|
}
|
|
|
|
pub fn get_day(&self, day_num: usize) -> Result<&Box<dyn DayTrait>> {
|
|
Ok(self
|
|
.days
|
|
.get(day_num - 1)
|
|
.ok_or(TemplateError::InvalidNumber(day_num))?)
|
|
}
|
|
|
|
pub fn get_all_days(&self) -> &[Box<dyn DayTrait>] {
|
|
&self.days
|
|
}
|
|
}
|