#![allow(clippy::all)]
use clap::{Parser, ValueHint};
use serde::Deserialize;
use std::path::PathBuf;
pub mod ui {
#[cfg(feature = "cli")]
pub mod cli {
pub mod main;
pub mod modes;
}
#[cfg(feature = "gui")]
pub mod gui {
pub mod config;
pub mod main;
pub mod popup;
pub mod practice;
pub mod results;
}
#[cfg(feature = "tui")]
pub mod tui {
pub mod app;
pub mod r#mod;
pub mod ui;
pub mod popup;
}
}
pub mod button_states;
pub mod color_scheme;
pub mod config;
pub mod custom_colors;
pub mod language;
pub mod leaderboard;
pub mod practice;
pub mod utils;
pub mod time_selection;
pub mod word_number_selection;
pub mod settings;
pub mod batch_size_selection;
pub mod top_words_selection;
#[derive(Parser)]
#[command(name = "typeman", about = "Welcome to the typeman!", version = "1.0")]
pub struct Cli {
#[arg(short = 'c', long = "custom", value_name = "FILE", value_hint = ValueHint::FilePath)]
pub custom_file: Option<PathBuf>,
#[arg(short = 'q', long = "quote")]
pub random_quote: bool,
#[arg(short = 'p', long = "punctuation")]
pub punctuation: bool,
#[arg(short = 'd', long = "digits")]
pub digits: bool,
#[arg(short = 't', long = "time", value_name = "SECONDS")]
pub time_limit: Option<Option<u64>>,
#[arg(short = 'n', long = "top_words", value_name = "WORDS")]
pub top_words: Option<usize>,
#[arg(short = 'w', long = "word_number", value_name = "WORDS", num_args = 0..=1)]
pub word_number: Option<Option<usize>>,
#[arg(short = 'l', long = "level")]
pub level: Option<Option<usize>>,
#[arg(long = "gui")]
pub gui: bool,
#[arg(long = "tui")]
pub tui: bool,
#[arg(long = "cli")]
pub cli: bool,
#[arg(long = "lang", value_name = "LANGUAGE")]
pub language: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct Quote {
pub author: String,
pub text: String,
}