lifec 0.1.1

A CLI tool that displays your life calendar.
Documentation
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,
        }
    }
}