hyper_scripter/args/
completion.rs

1use clap::Parser;
2use std::num::NonZeroUsize;
3
4#[derive(Parser, Debug)]
5#[clap(disable_help_flag = true, allow_hyphen_values = true)]
6pub enum Completion {
7    LS {
8        #[clap(long)]
9        limit: Option<NonZeroUsize>,
10        #[clap(long)]
11        bang: bool,
12        #[clap(long)]
13        name: Option<String>, // NOTE: 不用 ScriptName,因為有 `hs/` 這種輸入要考慮
14        #[clap(required = true, min_values = 1)]
15        args: Vec<String>,
16    },
17    Alias {
18        #[clap(required = true, min_values = 1)]
19        args: Vec<String>,
20    },
21    Home {
22        #[clap(required = true, min_values = 1)]
23        args: Vec<String>,
24    },
25    ParseRun {
26        #[clap(required = true, min_values = 1)]
27        args: Vec<String>,
28    },
29    NoSubcommand {
30        #[clap(required = true, min_values = 1)]
31        args: Vec<String>,
32    },
33}
34
35impl Completion {
36    pub fn from_args(args: &[String]) -> Option<Completion> {
37        let args = &args[1..];
38        if args.first().map(AsRef::as_ref) == Some("completion") {
39            log::info!("補全模式 {:?}", args);
40            Some(Completion::parse_from(args))
41        } else {
42            None
43        }
44    }
45}