Macro task

Source
macro_rules! task {
    (wait $seconds:tt) => { ... };
    (interval $seconds:tt) => { ... };
    (at $hour:tt : $minute:tt) => { ... };
    (wait $seconds:tt, weekday $day:tt) => { ... };
    (wait $seconds:tt, date $year:tt - $month:tt - $day:tt) => { ... };
    (wait $seconds:tt, time $start_h:tt : $start_m:tt .. $end_h:tt : $end_m:tt) => { ... };
    (interval $seconds:tt, weekday $day:tt) => { ... };
    (interval $seconds:tt, date $year:tt - $month:tt - $day:tt) => { ... };
    (interval $seconds:tt, time $start_h:tt : $start_m:tt .. $end_h:tt : $end_m:tt) => { ... };
    (at $hour:tt : $minute:tt, weekday $day:tt) => { ... };
    (at $hour:tt : $minute:tt, date $year:tt - $month:tt - $day:tt) => { ... };
    (at $hour:tt : $minute:tt, time $start_h:tt : $start_m:tt .. $end_h:tt : $end_m:tt) => { ... };
    (wait $seconds:tt, [$($skip:tt)*]) => { ... };
    (interval $seconds:tt, [$($skip:tt)*]) => { ... };
    (at $hour:tt : $minute:tt, [$($skip:tt)*]) => { ... };
    (@build_skips) => { ... };
    (@build_skips weekday $day:tt $(, $($rest:tt)*)?) => { ... };
    (@build_skips date $year:tt - $month:tt - $day:tt $(, $($rest:tt)*)?) => { ... };
    (@build_skips time $start_h:tt : $start_m:tt .. $end_h:tt : $end_m:tt $(, $($rest:tt)*)?) => { ... };
}