1use clap::{Parser, Subcommand};
4use clap_complete::Shell;
5
6#[derive(Debug, Parser)]
8#[clap(author, about, version)]
9#[clap(propagate_version = true)]
10pub struct Config {
11 #[command(subcommand)]
13 pub command: Command,
14}
15
16#[derive(Debug, Subcommand)]
18pub enum Command {
19 Run {
21 #[command(flatten)]
23 args: RunConfig,
24 },
25
26 GenerateCompletion {
28 #[arg(value_enum, value_parser = clap::value_parser!(Shell))]
30 shell: Shell,
31 },
32}
33
34#[derive(Debug, clap::Args)]
36pub struct RunConfig {
37 #[arg(short='i', long="sample-rate", default_value = "1000",
41 value_parser = clap::value_parser!(u16).range(100..))]
42 pub sample_rate_ms: u16,
43
44 #[arg(long, default_value = "128")]
48 pub history_size: usize,
49
50 #[arg(long, default_value = "2")]
52 pub accent_color: u8,
53
54 #[arg(long, default_value = "2")]
56 pub gauge_fg_color: u8,
57
58 #[arg(long, default_value = "7")]
60 pub gauge_bg_color: u8,
61
62 #[arg(long, default_value = "4")]
64 pub history_fg_color: u8,
65
66 #[arg(long, default_value = "7")]
68 pub history_bg_color: u8,
69
70 #[arg(long, default_value = "false")]
72 pub json: bool,
73}
74
75impl RunConfig {
76 pub fn colors(&self) -> UiColors {
78 UiColors {
79 accent: self.accent_color,
80 gauge_fg: self.gauge_fg_color,
81 gauge_bg: self.gauge_bg_color,
82 history_fg: self.history_fg_color,
83 history_bg: self.history_bg_color,
84 }
85 }
86}
87
88#[derive(Debug)]
90pub struct UiColors {
91 pub accent: u8,
93 pub gauge_fg: u8,
95 pub gauge_bg: u8,
97 pub history_fg: u8,
99 pub history_bg: u8,
101}