diff --git a/src/main.rs b/src/main.rs index 56f0661..2eab9de 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,7 +9,7 @@ use std::process::exit; use ::rizzy::timezones::parse_timezone; use ::rizzy::RizzyError; use chrono_tz::America::{Chicago, New_York}; -use chrono_tz::Tz; +use chrono_tz::{Tz, UTC}; use clap::{crate_authors, crate_description, crate_version, AppSettings, Parser}; use eyre::Context; @@ -31,6 +31,9 @@ struct Opts { /// Use Chicago timestamp #[clap(long)] chi: bool, + /// Use UTC timestamp + #[clap(long)] + utc: bool, /// use ZONE instead of local zone #[clap(short, long)] zone: Option, @@ -44,18 +47,24 @@ struct Opts { file: Vec, } -fn get_timezone(Opts { nyc, chi, zone, .. }: &Opts) -> Result { - match (nyc, chi, zone) { - (true, true, _) => Err(RizzyError::InvalidArg( +fn get_timezone( + Opts { + nyc, + chi, + utc, + zone, + .. + }: &Opts, +) -> Result { + match (nyc, chi, utc, zone) { + (true, false, false, None) => Ok(New_York), + (false, true, false, None) => Ok(Chicago), + (false, false, true, None) => Ok(UTC), + (false, false, false, None) => Ok(Chicago), // default + (false, false, false, Some(tz_string)) => parse_timezone(&tz_string), + _ => Err(RizzyError::InvalidArg( "Cannot use more than one timezone override".to_string(), )), - (true, false, None) => Ok(New_York), - (false, true, None) => Ok(Chicago), - (true, false, Some(_)) | (false, true, Some(_)) => Err(RizzyError::InvalidArg( - "Cannot supply --zone and an override".to_string(), - )), - (false, false, Some(tz_string)) => parse_timezone(&tz_string), - (false, false, None) => Ok(Chicago), } }