use std::str::FromStr;
use chrono::DateTime;
use clap::Parser;
use lifec::{LifeCalendar, LifeCalendarConfig, LifeCalendarStyle};
fn main() {
let args = Cli::parse();
let cfg = args.build_cfg();
LifeCalendar::from_cfg(cfg).print();
}
#[derive(Parser)]
struct Cli {
#[arg()]
birth_date_str: String,
#[arg(short, long)]
short: bool,
#[arg(short, long, default_value_t = 10)]
rows: u32,
#[arg(short, long, default_value_t = -2)]
offset: i32,
#[arg(short, long, default_value_t = 60)]
total: u32,
}
impl Cli {
fn build_cfg(&self) -> LifeCalendarConfig {
let birth_date_str = format!("{} 00:00:00Z", self.birth_date_str);
LifeCalendarConfig {
style: self.build_life_board_style(),
years_total: self.total,
birth_date: DateTime::from_str(&birth_date_str)
.expect("Failed to parse given birth date."),
}
}
fn build_life_board_style(&self) -> LifeCalendarStyle {
match self.short {
true => LifeCalendarStyle::Short {
rows: self.rows,
offset: self.offset,
},
false => LifeCalendarStyle::Full,
}
}
}