diff --git a/Cargo.lock b/Cargo.lock index 52be8ab..f186d3f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -384,7 +384,7 @@ dependencies = [ [[package]] name = "time-track" -version = "2.1.0" +version = "2.1.1" dependencies = [ "anyhow", "chrono", diff --git a/Cargo.toml b/Cargo.toml index ed1f106..944e031 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "time-track" -version = "2.1.0" +version = "2.1.1" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/args.rs b/src/args.rs index e4a0c2d..e24e8c3 100644 --- a/src/args.rs +++ b/src/args.rs @@ -5,8 +5,9 @@ use clap::Parser; #[command(author, version, about, long_about = None)] pub struct Args { /// How many hours you intend to work (sums with `minutes`) - #[arg(long, default_value_t = 8)] - pub hours: i64, + /// Usually defaults to 8 hours, but if discount is set then it defaults to 0 + #[arg(long)] + pub hours: Option, /// How many minutes you intend to work (sums with `hours`) #[arg(long, default_value_t = 0)] diff --git a/src/main.rs b/src/main.rs index 6539549..2963b9e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,6 +11,21 @@ use args::Args; fn main() -> Result<()> { let args = Args::parse(); let stdin = io::stdin(); + let hours = args.hours.unwrap_or( + if args.discount { + 0 + } else { + 8 + } + ); + + let target_minutes = if args.discount { + (8 * 60) - ((hours * 60) + args.minutes) + } else { + hours * 60 + args.minutes + }; + let (hrs, mins) = time::to_hrs_minutes(target_minutes); + println!("Working for {}", time::show_time(hrs, mins)); println!("Input times one per line. Send an EOF character to finish inputting..."); let mut lines: Vec = vec![]; for line in stdin.lock().lines() { @@ -42,11 +57,6 @@ fn main() -> Result<()> { total_minutes += (now - remaining).num_minutes(); } - let target_minutes = if args.discount { - (8 * 60) - (args.hours * 60 + args.minutes) - } else { - args.hours * 60 + args.minutes - }; println!("{}", time::get_charaterized_time_remaining(total_minutes, target_minutes)); Ok(()) } diff --git a/src/time.rs b/src/time.rs index 787041d..6d49767 100644 --- a/src/time.rs +++ b/src/time.rs @@ -27,7 +27,7 @@ pub fn from_stream<'a>(reference_date: &DateTime, stream: impl Iterator String { +pub fn show_time(hours: i64, minutes: i64) -> String { let pluralized_hours = match hours { 1 => "1 hour".to_string(), _ => format!("{hours} hours"), @@ -48,7 +48,7 @@ fn show_time(hours: i64, minutes: i64) -> String { return format!("{pluralized_hours} and {pluralized_minutes}"); } -fn to_hrs_minutes(total_minutes: i64) -> (i64, i64) { +pub fn to_hrs_minutes(total_minutes: i64) -> (i64, i64) { let minutes = total_minutes % 60; let hours = total_minutes / 60; (hours, minutes)