1use anstyle::{AnsiColor, Color, Style};
2use clap::{Parser, Subcommand, builder::Styles};
3use clap_verbosity_flag::{InfoLevel, Verbosity};
4
5fn get_styles() -> Styles {
7 Styles::styled()
8 .header(
9 Style::new()
10 .bold()
11 .underline()
12 .fg_color(Some(Color::Ansi(AnsiColor::Blue))),
13 )
14 .literal(Style::new().bold().fg_color(Some(Color::Ansi(AnsiColor::Cyan))))
15 .usage(
16 Style::new()
17 .bold()
18 .underline()
19 .fg_color(Some(Color::Ansi(AnsiColor::Blue))),
20 )
21 .placeholder(Style::new().bold().fg_color(Some(Color::Ansi(AnsiColor::Magenta))))
22}
23
24#[derive(Debug, Parser)]
26#[command(author, about, version)]
27#[command(propagate_version = true)]
28#[command(styles=get_styles())]
29pub struct Cli {
30 #[command(subcommand)]
31 pub commands: Commands,
32
33 #[clap(flatten)]
34 pub verbose: Verbosity<InfoLevel>,
35}
36
37#[derive(Debug, Subcommand)]
38pub enum Commands {
39 #[command(arg_required_else_help = true)]
40 Publish(crate::PublishInput),
41}