use crate::{
commands::{
auth::AuthArgs, config::ConfigArgs, create::CreateArgs, delete::DeleteArgs, get::GetArgs,
package::PackageArgs, parse::ParseArgs, update::UpdateArgs,
},
printer::OutputFormat,
};
use anyhow::{anyhow, Error, Result};
use reqwest::Url;
use std::{path::PathBuf, str::FromStr};
use structopt::StructOpt;
#[derive(Debug, StructOpt)]
#[structopt(
global_settings = &[
structopt::clap::AppSettings::ColoredHelp,
structopt::clap::AppSettings::InferSubcommands,
]
)]
pub struct Args {
#[structopt(long = "config-file", parse(from_os_str))]
pub config: Option<PathBuf>,
#[structopt(short = "c", long = "context")]
pub context: Option<String>,
#[structopt(short = "v", long = "verbose")]
pub verbose: bool,
#[structopt(long = "endpoint", parse(try_from_str))]
pub endpoint: Option<Url>,
#[structopt(short = "k", long = "accept-invalid-certificates", parse(try_from_str))]
pub accept_invalid_certificates: Option<bool>,
#[structopt(long = "token")]
pub token: Option<String>,
#[structopt(long = "proxy")]
pub proxy: Option<Url>,
#[structopt(short = "o", long = "output", default_value = "table")]
pub output: OutputFormat,
#[structopt(subcommand)]
pub command: Command,
#[structopt(long = "num-threads", default_value = "32")]
pub num_threads: u32,
}
#[allow(clippy::large_enum_variant)]
#[derive(Debug, StructOpt)]
pub enum Command {
#[structopt(name = "completion")]
Completion { shell: Shell },
#[structopt(name = "config")]
Config {
#[structopt(subcommand)]
config_args: ConfigArgs,
},
#[structopt(name = "create")]
Create {
#[structopt(subcommand)]
create_args: CreateArgs,
},
#[structopt(name = "update")]
Update {
#[structopt(subcommand)]
update_args: UpdateArgs,
},
#[structopt(name = "delete")]
Delete {
#[structopt(subcommand)]
delete_args: DeleteArgs,
},
#[structopt(name = "get")]
Get {
#[structopt(subcommand)]
get_args: GetArgs,
},
#[structopt(name = "parse")]
Parse {
#[structopt(subcommand)]
parse_args: ParseArgs,
},
#[structopt(name = "package")]
Package {
#[structopt(subcommand)]
package_args: PackageArgs,
},
#[structopt(name = "auth")]
Authentication {
#[structopt(subcommand)]
auth_args: AuthArgs,
},
}
#[derive(Debug)]
pub enum Shell {
Bash,
Zsh,
}
impl FromStr for Shell {
type Err = Error;
fn from_str(string: &str) -> Result<Self> {
match string {
"bash" => Ok(Shell::Bash),
"zsh" => Ok(Shell::Zsh),
_ => Err(anyhow!("unknown shell: '{}'", string)),
}
}
}