diff --git a/aoc/src/lib.rs b/aoc/src/lib.rs index 16b7871..bd6c1e7 100644 --- a/aoc/src/lib.rs +++ b/aoc/src/lib.rs @@ -1,6 +1,32 @@ +use std::env; + pub type Result = std::result::Result>; #[macro_export] macro_rules! err { ($($string:expr),+) => (Box::::from(format!($($string),+))) } + +type DayFunc = fn() -> Result<()>; + +pub fn run(days: &[DayFunc]) -> Result<()> { + let mut args = env::args(); + args.next(); + + match args.next() { + Some(arg) => { + let day: usize = arg.parse().expect("Please provide a day number"); + days[day - 1]().unwrap_or_else(|e| eprintln!("error running day specified: {}", e)); + } + None => { + for (i, day) in days.iter().enumerate() { + let i = i + 1; + println!("day{}: ", i); + day().unwrap_or_else(|e| eprintln!("error running day {}: {}", i, e)); + println!(); + } + } + } + + Ok(()) +} diff --git a/aoc2015/src/main.rs b/aoc2015/src/main.rs index 525cc22..4fc407f 100644 --- a/aoc2015/src/main.rs +++ b/aoc2015/src/main.rs @@ -1,5 +1,3 @@ -use std::env; - use aoc::Result; use aoc2015::day01; @@ -7,23 +5,5 @@ use aoc2015::day01; fn main() -> Result<()> { let days: &[fn() -> Result<()>] = &[day01::run]; - let mut args = env::args(); - args.next(); - - match args.next() { - Some(arg) => { - let day: usize = arg.parse().expect("Please provide a day number"); - days[day - 1]().unwrap_or_else(|e| eprintln!("error running day specified: {}", e)); - } - None => { - for (i, day) in days.iter().enumerate() { - let i = i + 1; - println!("day{}: ", i); - day().unwrap_or_else(|e| eprintln!("error running day {}: {}", i, e)); - println!(); - } - } - } - - Ok(()) + aoc::run(days) } diff --git a/aoc2018/src/main.rs b/aoc2018/src/main.rs index 7d72540..5aaf2e6 100644 --- a/aoc2018/src/main.rs +++ b/aoc2018/src/main.rs @@ -1,5 +1,3 @@ -use std::env; - use aoc::Result; use aoc2018::day01; @@ -11,23 +9,5 @@ use aoc2018::day05; fn main() -> Result<()> { let days: &[fn() -> Result<()>] = &[day01::run, day02::run, day03::run, day04::run, day05::run]; - let mut args = env::args(); - args.next(); - - match args.next() { - Some(arg) => { - let day: usize = arg.parse().expect("Please provide a day number"); - days[day - 1]().unwrap_or_else(|e| eprintln!("error running day specified: {}", e)); - } - None => { - for (i, day) in days.iter().enumerate() { - let i = i + 1; - println!("day{}: ", i); - day().unwrap_or_else(|e| eprintln!("error running day {}: {}", i, e)); - println!(); - } - } - } - - Ok(()) + aoc::run(days) } diff --git a/aoc2019/src/main.rs b/aoc2019/src/main.rs index a67a3e5..c841d6c 100644 --- a/aoc2019/src/main.rs +++ b/aoc2019/src/main.rs @@ -1,30 +1,10 @@ -use std::env; +use aoc::Result; use aoc2019::day01; use aoc2019::day02; -use aoc2019::Result; - fn main() -> Result<()> { let days: &[fn() -> Result<()>] = &[day01::run, day02::run]; - let mut args = env::args(); - args.next(); - - match args.next() { - Some(arg) => { - let day: usize = arg.parse().expect("Please provide a day number"); - days[day - 1]().unwrap_or_else(|e| eprintln!("error running day specified: {}", e)); - } - None => { - for (i, day) in days.iter().enumerate() { - let i = i + 1; - println!("day{}: ", i); - day().unwrap_or_else(|e| eprintln!("error running day {}: {}", i, e)); - println!(); - } - } - } - - Ok(()) + aoc::run(days) }