use std::env;
use piper_phoneme_streaming::Language;
#[derive(Debug)]
pub struct CliInput {
pub language: Language,
pub sentence: String,
}
pub fn parse_cli_input() -> Result<CliInput, String> {
let mut args = env::args().skip(1).collect::<Vec<_>>();
let mut language = Language::English;
let mut i = 0;
while i < args.len() {
if args[i] == "--lang" {
let Some(value) = args.get(i + 1) else {
return Err("--lang requires one argument: en|vi".to_string());
};
language = parse_language(value)?;
args.drain(i..=i + 1);
continue;
}
i += 1;
}
if args.is_empty() {
return Err(
"Usage: --lang en|vi <sentence words...>\nExample: --lang en this is a test"
.to_string(),
);
}
let sentence = args.join(" ");
Ok(CliInput { language, sentence })
}
fn parse_language(value: &str) -> Result<Language, String> {
match value {
"en" => Ok(Language::English),
"vi" => Ok(Language::Vietnamese),
other => Err(format!("invalid --lang value '{other}', expected en or vi")),
}
}