use clap::{Parser, Subcommand}; use crate::game::debug::DebugEvent; pub(super) fn respond(line: &str) -> Result { let might_be_help_call = line.contains("help") || line.contains("-h"); let args = shlex::split(line).ok_or("Invalid Quoting")?; let cli = Cli::try_parse_from(args).map_err(|e| e.to_string()); if might_be_help_call && cli.as_ref().is_err_and(|item| item.starts_with("Usage: ")) { let Err(s) = cli else { unreachable!() }; return Ok(DebugEvent::PrintToConsole(s)); } Ok(match cli?.cmd { Commands::Close => DebugEvent::CloseDebugConsole, Commands::Echo { text } => DebugEvent::PrintToConsole(text), }) } #[derive(Debug, Parser)] #[command(multicall = true)] struct Cli { #[command(subcommand)] cmd: Commands, } #[derive(Debug, Subcommand)] enum Commands { Close, Echo { text: String }, }