use clap::Subcommand;
pub mod generate_config;
pub mod process;
pub mod validate;
#[derive(Debug, Subcommand)]
pub enum Commands {
Process(process::ProcessArgs),
Validate(validate::ValidateArgs),
#[command(name = "generate-config")]
GenerateConfig(generate_config::GenerateConfigArgs),
List {
#[command(subcommand)]
subcommand: ListCommands,
},
}
#[derive(Debug, Subcommand)]
pub enum ListCommands {
Languages,
Formats,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_commands_debug_format() {
let process_cmd = Commands::Process(process::ProcessArgs {
input: vec!["test.txt".to_string()],
output: None,
format: process::OutputFormat::Text,
language: Some(process::Language::English),
language_config: None,
language_code: None,
parallel: false,
adaptive: false,
threads: None,
chunk_kb: None,
quiet: false,
verbose: 0,
stream: false,
stream_chunk_mb: 10,
});
let debug_str = format!("{:?}", process_cmd);
assert!(debug_str.contains("Process"));
assert!(debug_str.contains("test.txt"));
let list_cmd = Commands::List {
subcommand: ListCommands::Languages,
};
let debug_str = format!("{:?}", list_cmd);
assert!(debug_str.contains("List"));
assert!(debug_str.contains("Languages"));
}
#[test]
fn test_list_commands_variants() {
let languages = ListCommands::Languages;
let debug_str = format!("{:?}", languages);
assert!(debug_str.contains("Languages"));
let formats = ListCommands::Formats;
let debug_str = format!("{:?}", formats);
assert!(debug_str.contains("Formats"));
}
#[test]
fn test_enum_variants_completeness() {
let process_cmd = Commands::Process(process::ProcessArgs {
input: vec!["test.txt".to_string()],
output: None,
format: process::OutputFormat::Text,
language: Some(process::Language::English),
language_config: None,
language_code: None,
parallel: false,
adaptive: false,
threads: None,
chunk_kb: None,
quiet: false,
verbose: 0,
stream: false,
stream_chunk_mb: 10,
});
let list_cmd = Commands::List {
subcommand: ListCommands::Languages,
};
match process_cmd {
Commands::Process(_) => (),
Commands::Validate(_) => panic!("Should be Process"),
Commands::GenerateConfig(_) => panic!("Should be Process"),
Commands::List { .. } => panic!("Should be Process"),
}
match list_cmd {
Commands::Process(_) => panic!("Should be List"),
Commands::Validate(_) => panic!("Should be List"),
Commands::GenerateConfig(_) => panic!("Should be List"),
Commands::List { .. } => (),
}
}
#[test]
fn test_list_commands_completeness() {
match ListCommands::Languages {
ListCommands::Languages => (),
ListCommands::Formats => panic!("Should be Languages"),
}
match ListCommands::Formats {
ListCommands::Languages => panic!("Should be Formats"),
ListCommands::Formats => (),
}
}
}