use clap::{Parser, ValueEnum};
use std::path::PathBuf;
#[derive(Debug, Clone, ValueEnum, PartialEq)]
pub enum TranscriptionMode {
AlwaysOn,
Hotkey,
}
#[derive(Debug, Clone, ValueEnum, PartialEq)]
pub enum TranscriptionProviderAPI {
Groq,
OpenAI,
}
#[derive(Parser, Debug, Clone)]
#[command(author, version, about, long_about = None)]
pub struct AppConfig {
#[arg(short, long)]
pub device: Option<String>,
#[arg(short, long, value_enum, default_value = "always-on")]
pub mode: TranscriptionMode,
#[arg(short = 'k', long, default_value = "ctrl+space")]
pub hotkey: String,
#[arg(long, default_value = "data_dir")]
pub data_dir: PathBuf,
#[arg(long)]
pub debug: bool,
#[arg(short, long, value_enum, default_value = "groq")]
pub transcription_provider: TranscriptionProviderAPI,
#[arg(long, default_value = "true")]
pub enable_text_insertion: bool,
#[arg(long, default_value = "true")]
pub auto_capitalize: bool,
#[arg(long, default_value = "true")]
pub auto_punctuate: bool,
}
impl AppConfig {
pub fn parse() -> Result<Self, clap::Error> {
Self::try_parse()
}
}
impl Default for AppConfig {
fn default() -> Self {
Self {
device: None,
mode: TranscriptionMode::AlwaysOn,
hotkey: "ctrl+space".to_string(),
data_dir: PathBuf::from("data_dir"),
debug: false,
transcription_provider: TranscriptionProviderAPI::Groq,
enable_text_insertion: true,
auto_capitalize: true,
auto_punctuate: true,
}
}
}