From ecf967e3f58dfcfaa3b999a9e1da50a194b51fdd Mon Sep 17 00:00:00 2001 From: Moridius Date: Thu, 10 Sep 2020 08:01:43 +0200 Subject: [PATCH] Some refactoring. --- src/main.rs | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/main.rs b/src/main.rs index 378ec6a..2dc96e2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,18 +13,18 @@ fn command_to_date(command: &str) -> Result, ()> { } fn calc_date(command: &str, today: Date) -> Result, ()> { - let wday = today.weekday().num_days_from_monday() as i64; - if command == "today" { - return Ok(today); + let offset = if command == "today" { + Ok(0) } else if command == "tomorrow" { - return Ok(today + Duration::days(1)); + Ok(1) } else if command == "yesterday" { - return Ok(today - Duration::days(1)); + Ok(-1) } else if command == "daybeforeyesterday" { - return Ok(today - Duration::days(2)); + Ok(-2) } else if command == "dayaftertomorrow" { - return Ok(today + Duration::days(2)); + Ok(2) } else if command.starts_with("next") || command.starts_with("last") { + let wday = today.weekday().num_days_from_monday() as i64; let target = match &command[4..] { "monday" => Ok(0), "tuesday" => Ok(1), @@ -38,13 +38,20 @@ fn calc_date(command: &str, today: Date) -> Result, ()> { if let Ok(target) = target { if command.starts_with("next") { - let offset = (target - wday + 7 - 1) % 7 + 1; - return Ok(today + Duration::days(offset)); + Ok((target - wday + 7 - 1) % 7 + 1) + } else { + Ok(-((wday - target + 7 - 1) % 7 + 1)) } - let offset = (wday - target + 7 - 1) % 7 + 1; - return Ok(today - Duration::days(offset)); + } else { + Err(()) } + } else { + return Err(()); }; + + if let Ok(offset) = offset { + return Ok(today + Duration::days(offset)); + } Err(()) }