pnafs 0.0.5

PNA(Portable-Network-Archive) file system
use crate::{cli::Cli, command::Command};
use clap::{Args, CommandFactory};
use clap_complete::{generate, Generator, Shell};
use std::{env, io, path::PathBuf};

#[derive(Args)]
pub(crate) struct CompleteArgs {
    #[arg(help = "shell")]
    pub(crate) shell: Shell,
}

impl Command for CompleteArgs {
    fn execute(self) -> io::Result<()> {
        print_completions(self.shell, &mut Cli::command());
        Ok(())
    }
}

fn print_completions<G: Generator>(generator: G, cmd: &mut clap::Command) {
    let name = env::args().next().map(PathBuf::from).unwrap();
    generate(
        generator,
        cmd,
        name.file_name().unwrap().to_string_lossy(),
        &mut io::stdout(),
    );
}