Compare commits

..

No commits in common. "2a979cd98ff316034333d89e38c9d1b8c80d9ac3" and "bac4079c4cd0c832b12b25b4e7b08103ac9e6638" have entirely different histories.

3 changed files with 23 additions and 33 deletions

View File

@ -46,6 +46,10 @@ pub fn create_timetable<TzLocal: TimeZone, TzTarget: TimeZone>(
Ok(create_timetable_vecs(&time_in_timezone.time(), padding_hrs)) Ok(create_timetable_vecs(&time_in_timezone.time(), padding_hrs))
} }
pub fn get_todays_date() -> String {
Local::now().format("%d-%m-%Y").to_string()
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;

View File

@ -1,10 +1,9 @@
use super::calendar::create_timetable; use super::calendar::{create_timetable, get_todays_date};
use chrono::Local; use chrono::Local;
use chrono::NaiveDate; use chrono::NaiveDate;
use chrono::NaiveTime; use chrono::NaiveTime;
use chrono::TimeZone; use chrono::TimeZone;
use chrono_tz::TZ_VARIANTS;
use chrono_tz::Tz; use chrono_tz::Tz;
use clap::Parser; use clap::Parser;
use colored::Colorize; use colored::Colorize;
@ -29,10 +28,7 @@ pub struct Args {
#[arg(short, long, default_value = "Local")] #[arg(short, long, default_value = "Local")]
pub local: String, pub local: String,
#[arg(long)] pub time: String,
pub list: bool,
pub time: Option<String>,
} }
#[derive(PartialEq, Debug)] #[derive(PartialEq, Debug)]
@ -62,30 +58,30 @@ impl fmt::Display for CliError {
impl Error for CliError {} impl Error for CliError {}
// struct Timetable {
// pub name: String,
// pub values: Vec<NaiveTime>,
// }
pub fn print_timezones( pub fn print_timezones(
timezones: &Vec<String>, timezones: &Vec<String>,
time: Option<&String>, time: &String,
date: Option<&String>, date: Option<&String>,
local_timezone: &String, local_timezone: &String,
padding_hours: i8, padding_hours: i8,
) -> Result<(), CliError> { ) -> Result<(), CliError> {
let parsed_time = if let Some(t) = time { let todays_date = &get_todays_date();
if let Ok(hour) = t.parse::<u32>() { let date = date.unwrap_or(todays_date);
let parsed_time = if let Ok(hour) = time.parse::<u32>() {
NaiveTime::from_hms_opt(hour, 0, 0).ok_or(CliError::CouldNotParseTime)? NaiveTime::from_hms_opt(hour, 0, 0).ok_or(CliError::CouldNotParseTime)?
} else { } else {
NaiveTime::parse_from_str(t, "%H:%M").map_err(|_| CliError::CouldNotParseTime)? NaiveTime::parse_from_str(time, "%H:%M").map_err(|_| CliError::CouldNotParseTime)?
}
} else {
Local::now().naive_local().time()
}; };
let parsed_date = if let Some(d) = date { let parsed_date = NaiveDate::parse_from_str(date, "%d-%m-%Y")
NaiveDate::parse_from_str(d, "%d-%m-%Y") .or_else(|_| NaiveDate::parse_from_str(date, "%d-%m"))
.or_else(|_| NaiveDate::parse_from_str(d, "%d-%m")) .map_err(|_| CliError::CouldNotParseDate)?;
.map_err(|_| CliError::CouldNotParseDate)?
} else {
Local::now().naive_local().date()
};
if local_timezone == "Local" { if local_timezone == "Local" {
print_calendar( print_calendar(
@ -203,9 +199,3 @@ fn print_timetable(name: &String, name_padding_len: u32, timetable: &Vec<NaiveTi
println!("{}:{}\t{}", name, name_padding, formatted.join("\t")); println!("{}:{}\t{}", name, name_padding, formatted.join("\t"));
} }
pub fn list_timezones() {
for tz in TZ_VARIANTS {
println!("{}", tz.name())
}
}

View File

@ -4,17 +4,13 @@ mod cli;
use clap::Parser; use clap::Parser;
use cli::{Args, print_timezones}; use cli::{Args, print_timezones};
use crate::cli::list_timezones;
fn main() { fn main() {
let args = Args::parse(); let args = Args::parse();
if args.list { if args.timezone.len() > 0 {
list_timezones();
} else if args.timezone.len() > 0 {
let res = print_timezones( let res = print_timezones(
&args.timezone, &args.timezone,
args.time.as_ref(), &args.time,
args.date.as_ref(), args.date.as_ref(),
&args.local, &args.local,
5, 5,