--- /dev/null
+use std::error::Error;
+
+pub fn run() -> Result<(), Box<dyn Error>> {
+ let input = "blabl";
+ run_part1(&input)?;
+ run_part2(&input)?;
+ Ok(())
+}
+
+fn run_part1(input: &str) -> Result<String, Box<dyn Error>> {
+ println!("Running day00 (template) - part 1");
+ println!("{input}");
+ Ok(input.to_string())
+}
+
+fn run_part2(input: &str) -> Result<String, Box<dyn Error>> {
+ println!("Running day00 (template) - part 2");
+ Ok(input.to_string())
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn day00_part1() {
+ let input = "\
+blabla";
+ let res = run_part1(&input);
+ assert_eq!("blabla", res.unwrap());
+ }
+
+ #[test]
+ fn day00_part2() {
+ let input = "\
+blabla";
+ let res = run_part2(&input);
+ assert_eq!("blabla", res.unwrap());
+ }
+}
--- /dev/null
+use std::env;
+use std::process;
+use std::error::Error;
+
+pub mod day00;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+ if args.len() != 2 {
+ println!("Missing argument");
+ process::exit(1);
+ }
+
+ if let Err(e) = run(args[1].clone()) {
+ println!("Error: {e}");
+ process::exit(1);
+ }
+}
+
+fn run(day: String) -> Result<(), Box<dyn Error>> {
+ if day == "day00" {
+ day00::run()?;
+ } else {
+ return Err(format!("unknown day \"{day}\"").into());
+ }
+ Ok(())
+}