@@ -4,6 +4,8 @@ macro_rules! run_day {
44 { $i: expr, $curr_day: expr, $year: expr, $opt: expr } ,
55 { day $day: ident { $gen: tt { $( { sol $solution: ident } ) * } } }
66 ) => { {
7+ use $crate:: colored:: * ;
8+
79 if stringify!( $day) == $curr_day {
810 if $i != 0 { println!( ) }
911 let day = $curr_day[ 3 ..] . parse( ) . expect( "days must be integers" ) ;
@@ -23,19 +25,27 @@ macro_rules! run_day {
2325 }
2426 } ;
2527
26- let input = $crate:: run_gen!( $day, & data, $gen) ;
27-
28- $( {
29- let start = Instant :: now( ) ;
30- let response = $day:: $solution( & input) ;
31- let elapsed = start. elapsed( ) ;
28+ if let Some ( input) = $crate:: run_gen!( $day, & data, $gen) {
29+ $( {
30+ let start = Instant :: now( ) ;
31+ let response = $day:: $solution( & input) ;
32+ let elapsed = start. elapsed( ) ;
3233
33- $crate:: print_with_duration(
34- stringify!( $solution) ,
35- Some ( & format!( "{}" , response) ) ,
36- elapsed,
37- ) ;
38- } ) +
34+ $crate:: print_with_duration(
35+ stringify!( $solution) ,
36+ Some ( format!( "{}" , response) . normal( ) ) ,
37+ Some ( elapsed) ,
38+ ) ;
39+ } ) +
40+ } else {
41+ $( {
42+ $crate:: print_with_duration(
43+ stringify!( $solution) ,
44+ Some ( "skipped" . dimmed( ) ) ,
45+ None ,
46+ ) ;
47+ } ) +
48+ }
3949 }
4050 } }
4151}
@@ -44,15 +54,36 @@ macro_rules! run_day {
4454macro_rules! run_gen {
4555 // No generator is needed: default begavior is to just pass input &str
4656 ( $day: ident, $data: expr, { gen_default } ) => { {
47- $data
57+ Some ( $data)
4858 } } ;
4959
5060 // Run generator
5161 ( $day: ident, $data: expr, { gen $generator: ident } ) => { {
5262 let start = Instant :: now( ) ;
5363 let input = $day:: $generator( $data) ;
5464 let elapsed = start. elapsed( ) ;
55- $crate:: print_with_duration( "generator" , None , elapsed) ;
56- input
65+ $crate:: print_with_duration( "generator" , None , Some ( elapsed) ) ;
66+ Some ( input)
67+ } } ;
68+
69+ // Run fallible generator
70+ ( $day: ident, $data: expr, { gen_fallible $generator: ident } ) => { {
71+ use $crate:: colored:: * ;
72+ use $crate:: try_unwrap:: TryUnwrap ;
73+
74+ let start = Instant :: now( ) ;
75+ let result = $day:: $generator( $data) ;
76+ let elapsed = start. elapsed( ) ;
77+
78+ match result. try_unwrap( ) {
79+ Ok ( input) => {
80+ $crate:: print_with_duration( "generator" , None , Some ( elapsed) ) ;
81+ Some ( input)
82+ }
83+ Err ( msg) => {
84+ $crate:: print_with_duration( "generator" , Some ( msg. red( ) ) , Some ( elapsed) ) ;
85+ None
86+ }
87+ }
5788 } } ;
5889}
0 commit comments