1pub mod cli;
6pub mod complete;
7
8use clap::{Parser, Subcommand};
9use clap_complete::engine::ArgValueCompleter;
10
11use crate::complete::complete_serials;
12
13pub fn command() -> clap::Command {
15 use clap::CommandFactory as _;
16 Cli::command()
17}
18
19#[derive(Parser, Debug)]
20#[command(name = "yb", about = "Secure blob storage on a YubiKey", version)]
21pub struct Cli {
22 #[arg(short = 's', long = "serial", add = ArgValueCompleter::new(complete_serials))]
24 pub serial: Option<u32>,
25
26 #[arg(short = 'r', long = "reader")]
28 pub reader: Option<String>,
29
30 #[arg(short = 'q', long = "quiet")]
32 pub quiet: bool,
33
34 #[arg(long = "pin-stdin")]
36 pub pin_stdin: bool,
37
38 #[arg(long = "debug")]
40 pub debug: bool,
41
42 #[arg(long = "allow-defaults")]
44 pub allow_defaults: bool,
45
46 #[arg(long = "pin", hide = true)]
48 pub pin_deprecated: Option<String>,
49
50 #[arg(short = 'k', long = "key", hide = true)]
52 pub key_deprecated: Option<String>,
53
54 #[command(subcommand)]
55 pub command: Commands,
56}
57
58#[derive(Subcommand, Debug)]
59pub enum Commands {
60 Format(cli::format::FormatArgs),
62 Store(cli::store::StoreArgs),
64 Fetch(cli::fetch::FetchArgs),
66 #[command(alias = "ls")]
68 List(cli::list::ListArgs),
69 #[command(alias = "rm")]
71 Remove(cli::remove::RemoveArgs),
72 Fsck(cli::fsck::FsckArgs),
74 RotateManagementKey(cli::rotate_management_key::RotateManagementKeyArgs),
77 ListReaders(cli::list_readers::ListReadersArgs),
79 Select(cli::select::SelectArgs),
81 #[cfg(feature = "self-test")]
83 SelfTest(cli::self_test::SelfTestArgs),
84}