use async_trait::async_trait;
use std::fmt::Display;
pub trait Puzzl: Send + Sync {
type InputType;
fn year(&self) -> u32;
fn day(&self) -> u32;
fn data(&self) -> Self::InputType;
}
#[async_trait]
pub trait Solve: Send + Sync {
type PartOne: Display + Send + Sync;
type PartTwo: Display + Send + Sync;
async fn part_one(&self) -> Result<Self::PartOne, Box<dyn std::error::Error + Send + Sync>>;
async fn part_two(&self) -> Result<Self::PartTwo, Box<dyn std::error::Error + Send + Sync>>;
}