Compare commits
3 Commits
bac4079c4c
...
2a979cd98f
| Author | SHA1 | Date |
|---|---|---|
|
|
2a979cd98f | |
|
|
a01d0db7ce | |
|
|
c1b2fce366 |
|
|
@ -46,10 +46,6 @@ 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::*;
|
||||||
|
|
|
||||||
44
src/cli.rs
44
src/cli.rs
|
|
@ -1,9 +1,10 @@
|
||||||
use super::calendar::{create_timetable, get_todays_date};
|
use super::calendar::create_timetable;
|
||||||
|
|
||||||
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;
|
||||||
|
|
@ -28,7 +29,10 @@ pub struct Args {
|
||||||
#[arg(short, long, default_value = "Local")]
|
#[arg(short, long, default_value = "Local")]
|
||||||
pub local: String,
|
pub local: String,
|
||||||
|
|
||||||
pub time: String,
|
#[arg(long)]
|
||||||
|
pub list: bool,
|
||||||
|
|
||||||
|
pub time: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(PartialEq, Debug)]
|
#[derive(PartialEq, Debug)]
|
||||||
|
|
@ -58,30 +62,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: &String,
|
time: Option<&String>,
|
||||||
date: Option<&String>,
|
date: Option<&String>,
|
||||||
local_timezone: &String,
|
local_timezone: &String,
|
||||||
padding_hours: i8,
|
padding_hours: i8,
|
||||||
) -> Result<(), CliError> {
|
) -> Result<(), CliError> {
|
||||||
let todays_date = &get_todays_date();
|
let parsed_time = if let Some(t) = time {
|
||||||
let date = date.unwrap_or(todays_date);
|
if let Ok(hour) = t.parse::<u32>() {
|
||||||
|
NaiveTime::from_hms_opt(hour, 0, 0).ok_or(CliError::CouldNotParseTime)?
|
||||||
let parsed_time = if let Ok(hour) = time.parse::<u32>() {
|
} else {
|
||||||
NaiveTime::from_hms_opt(hour, 0, 0).ok_or(CliError::CouldNotParseTime)?
|
NaiveTime::parse_from_str(t, "%H:%M").map_err(|_| CliError::CouldNotParseTime)?
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
NaiveTime::parse_from_str(time, "%H:%M").map_err(|_| CliError::CouldNotParseTime)?
|
Local::now().naive_local().time()
|
||||||
};
|
};
|
||||||
|
|
||||||
let parsed_date = NaiveDate::parse_from_str(date, "%d-%m-%Y")
|
let parsed_date = if let Some(d) = date {
|
||||||
.or_else(|_| NaiveDate::parse_from_str(date, "%d-%m"))
|
NaiveDate::parse_from_str(d, "%d-%m-%Y")
|
||||||
.map_err(|_| CliError::CouldNotParseDate)?;
|
.or_else(|_| NaiveDate::parse_from_str(d, "%d-%m"))
|
||||||
|
.map_err(|_| CliError::CouldNotParseDate)?
|
||||||
|
} else {
|
||||||
|
Local::now().naive_local().date()
|
||||||
|
};
|
||||||
|
|
||||||
if local_timezone == "Local" {
|
if local_timezone == "Local" {
|
||||||
print_calendar(
|
print_calendar(
|
||||||
|
|
@ -199,3 +203,9 @@ 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())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,17 @@ 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.timezone.len() > 0 {
|
if args.list {
|
||||||
|
list_timezones();
|
||||||
|
} else if args.timezone.len() > 0 {
|
||||||
let res = print_timezones(
|
let res = print_timezones(
|
||||||
&args.timezone,
|
&args.timezone,
|
||||||
&args.time,
|
args.time.as_ref(),
|
||||||
args.date.as_ref(),
|
args.date.as_ref(),
|
||||||
&args.local,
|
&args.local,
|
||||||
5,
|
5,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue