#[macro_use] extern crate clap; mod day_1; mod day_2; mod day_3; mod day_4; mod puzzle; use crate::puzzle::options::Options; use crate::puzzle::traits::{Create, Solve}; fn main() { let yml = load_yaml!("cli.yml"); let matches = clap::App::from_yaml(yml).get_matches(); let day = opt_str_to_int(matches.value_of("day")); let puzzle_number = opt_str_to_int(matches.value_of("puzzle")); let prompt = matches.is_present("prompt"); let options = Options { puzzle: puzzle_number, prompt, }; let puzzle: Box = match day { 1 => day_1::Puzzle::new(options), 2 => day_2::Puzzle::new(options), 3 => day_3::Puzzle::new(options), 4 => day_4::Puzzle::new(options), e => panic!("unknown day {}", e), }; let res = puzzle.solve(); println!("{}", res); } fn opt_str_to_int(val: Option<&str>) -> i32 { match val { Some(val) => val.parse::().unwrap(), None => panic!("value not supplied! type --help"), } }