]> git.sesse.net Git - bcachefs-tools-debian/blob - rust-src/src/cmd_completions.rs
Upload to experimental
[bcachefs-tools-debian] / rust-src / src / cmd_completions.rs
1 use crate::transform_c_args;
2 use clap::{Command, CommandFactory, Parser};
3 use clap_complete::{generate, Generator, Shell};
4 use std::ffi::{c_char, c_int};
5 use std::io;
6
7 /// Generate shell completions
8 #[derive(clap::Parser, Debug)]
9 pub struct Cli {
10     shell: Shell,
11 }
12
13 fn print_completions<G: Generator>(gen: G, cmd: &mut Command) {
14     generate(gen, cmd, cmd.get_name().to_string(), &mut io::stdout());
15 }
16
17 #[no_mangle]
18 #[allow(clippy::not_unsafe_ptr_arg_deref)]
19 pub extern "C" fn cmd_completions(argc: c_int, argv: *const *const c_char) -> c_int {
20     transform_c_args!(argv, argc, argv);
21     let cli = Cli::parse_from(argv);
22     print_completions(cli.shell, &mut super::Cli::command());
23     0
24 }