seaplane_cli/cli/cmds/
metadata.rs

1mod common;
2mod delete;
3mod get;
4mod list;
5mod set;
6
7use clap::{value_parser, ArgMatches, Command};
8
9pub use self::{
10    common::SeaplaneMetadataCommonArgMatches,
11    delete::SeaplaneMetadataDelete,
12    get::SeaplaneMetadataGet,
13    list::SeaplaneMetadataList,
14    set::{SeaplaneMetadataSet, SeaplaneMetadataSetArgMatches},
15};
16use crate::{cli::CliCommand, printer::OutputFormat};
17
18#[derive(Copy, Clone, Debug)]
19pub struct SeaplaneMetadata;
20
21impl SeaplaneMetadata {
22    pub fn command() -> Command {
23        Command::new("metadata")
24            .about("Operate on metadata key-value pairs using the Global Data Coordination API")
25            .subcommand_required(true)
26            .arg_required_else_help(true)
27            .visible_aliases(["meta", "md"])
28            .arg(
29                arg!(--format =["FORMAT"=>"table"] global)
30                    .help("Change the output format")
31                    .value_parser(value_parser!(OutputFormat)),
32            )
33            .subcommand(SeaplaneMetadataGet::command())
34            .subcommand(SeaplaneMetadataSet::command())
35            .subcommand(SeaplaneMetadataDelete::command())
36            .subcommand(SeaplaneMetadataList::command())
37    }
38}
39
40impl CliCommand for SeaplaneMetadata {
41    fn next_subcmd<'a>(
42        &self,
43        matches: &'a ArgMatches,
44    ) -> Option<(Box<dyn CliCommand>, &'a ArgMatches)> {
45        match &matches.subcommand() {
46            Some(("get", m)) => Some((Box::new(SeaplaneMetadataGet), m)),
47            Some(("set", m)) => Some((Box::new(SeaplaneMetadataSet), m)),
48            Some(("delete", m)) => Some((Box::new(SeaplaneMetadataDelete), m)),
49            Some(("list", m)) => Some((Box::new(SeaplaneMetadataList), m)),
50            _ => None,
51        }
52    }
53}