use crate::{ common::{Content, Style, Toggle}, duration, event::{Event, parse_event}, }; #[cfg(feature = "sound")] use crate::{sound, sound::SoundError}; use clap::Parser; use std::path::PathBuf; use std::time::Duration; pub const LOG_DIRECTORY_DEFAULT_MISSING_VALUE: &str = " "; // empty string #[derive(Parser)] #[command(version)] pub struct Args { #[arg(long, short, value_parser = duration::parse_long_duration, help = "Countdown time to start from. Formats: 'Yy Dd hh:mm:ss', 'Dd hh:mm:ss', 'Yy mm:ss', 'Dd mm:ss', 'Yy ss', 'Dd ss', 'hh:mm:ss', 'mm:ss', 'ss'. Examples: '1y 5d 10:30:00', '2d 4:00', '1d 10', '5:03'." )] pub countdown: Option, #[arg(long, short, value_parser = duration::parse_duration, help = "Work time to count down from. Formats: 'ss', 'mm:ss', 'hh:mm:ss'" )] pub work: Option, #[arg(long, short, value_parser = duration::parse_duration, help = "Pause time to count down from. Formats: 'ss', 'mm:ss', 'hh:mm:ss'" )] pub pause: Option, #[arg( long, short = 'e', value_parser = parse_event, help = "Event date time and title (optional). Format: 'YYYY-MM-DD HH:MM:SS' or 'time=YYYY-MM-DD HH:MM:SS[,title=...]'. Examples: '2025-10-10 14:30:00' or 'time=2025-10-10 14:30:00,title=My Event'." )] pub event: Option, #[arg(long, short = 'd', help = "Show deciseconds.")] pub decis: bool, #[arg(long, short = 'm', value_enum, help = "Mode to start with.")] pub mode: Option, #[arg(long, short = 's', value_enum, help = "Style to display time with.")] pub style: Option