wasmer_cli/commands/
gen_completions.rs

1use super::WasmerCmd;
2use clap::CommandFactory;
3use clap_complete::{Shell, generate};
4use std::fs::OpenOptions;
5
6#[derive(Debug, Clone, clap::Parser)]
7pub struct CmdGenCompletions {
8    /// The shell to generate the autocompletions script for.
9    pub shell: Shell,
10
11    /// Where to store the generated file(s) to. Defaults to stdout.
12    #[clap(long)]
13    pub out: Option<String>,
14}
15
16impl CmdGenCompletions {
17    pub fn execute(&self) -> anyhow::Result<()> {
18        let mut cmd = WasmerCmd::command();
19
20        let name = std::env::args().next().unwrap();
21        if let Some(out) = &self.out {
22            let mut f = OpenOptions::new()
23                .truncate(true)
24                .create(true)
25                .write(true)
26                .open(out)?;
27            generate(self.shell, &mut cmd, name, &mut f);
28            Ok(())
29        } else {
30            generate(self.shell, &mut cmd, name, &mut std::io::stdout());
31            Ok(())
32        }
33    }
34}