Days in Month solution
to_day_of_week can be heavily simplified by using match instead of if-else:

fn to_day_of_week(input: &amp;str) -&gt; Option&lt;usize&gt; {
    match input {
        "mon" =&gt; Some(0),
        "tues" =&gt; Some(1),
        "wed" =&gt; Some(2),
        "thurs" =&gt; Some(3),
        "fri" =&gt; Some(4),
        "sat" =&gt; Some(5),
        "sun" =&gt; Some(6),
        _ =&gt; None,
    }
}


The bulkiness of your code can be somewhat helped if you provide additional functions and use ? instead of unwrap. Using unwrap is discouraged, as far as I know. If you don't want to use ? or additional functions, early returns prevent your code from getting too much indented.