ricecoder_cli/
completion.rs1use crate::router::Cli;
5use clap::CommandFactory;
6use clap_complete::{generate, Shell};
7use std::io;
8
9pub fn generate_completions(shell: &str) -> Result<(), String> {
11 let shell = match shell.to_lowercase().as_str() {
12 "bash" => Shell::Bash,
13 "zsh" => Shell::Zsh,
14 "fish" => Shell::Fish,
15 "powershell" | "pwsh" => Shell::PowerShell,
16 "elvish" => Shell::Elvish,
17 _ => return Err(format!("Unknown shell: {}", shell)),
18 };
19
20 let mut cmd = Cli::command();
21 generate(shell, &mut cmd, "rice", &mut io::stdout());
22 Ok(())
23}
24
25#[cfg(test)]
26mod tests {
27 use super::*;
28
29 #[test]
30 fn test_valid_shells() {
31 let shells = vec!["bash", "zsh", "fish", "powershell"];
32 for shell in shells {
33 let _ = generate_completions(shell);
35 }
36 }
37
38 #[test]
39 fn test_invalid_shell() {
40 let result = generate_completions("invalid");
41 assert!(result.is_err());
42 }
43}