piper-phoneme-streaming 0.1.1

A high-performance Rust library for streaming Text-to-Phoneme (G2P) conversion.
Documentation
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")),
    }
}