use clap::{Parser, Subcommand};
use clap_complete::Shell;
#[derive(Parser)]
#[command(name = "termpulse", version, about, long_about = None)]
pub struct Cli {
#[arg(long, global = true)]
pub json: bool,
#[command(subcommand)]
pub command: Command,
}
#[derive(Subcommand)]
pub enum Command {
Set(SetOpts),
Start(StartOpts),
Done(DoneOpts),
Fail(FailOpts),
Wrap(WrapOpts),
Pipe(PipeOpts),
Clear,
Detect,
Completions(CompletionsOpts),
}
#[derive(clap::Args)]
pub struct CompletionsOpts {
pub shell: Shell,
}
#[derive(clap::Args)]
pub struct SetOpts {
pub percent: u8,
#[arg(short, long, default_value = "")]
pub label: String,
}
#[derive(clap::Args)]
pub struct StartOpts {
#[arg(short, long, default_value = "Working")]
pub label: String,
}
#[derive(clap::Args)]
pub struct DoneOpts {
#[arg(short, long, default_value = "Done")]
pub label: String,
}
#[derive(clap::Args)]
pub struct FailOpts {
#[arg(short, long, default_value = "Failed")]
pub label: String,
}
#[derive(clap::Args)]
pub struct WrapOpts {
#[arg(trailing_var_arg = true, required = true)]
pub command: Vec<String>,
#[arg(short, long, default_value = "Running")]
pub label: String,
#[arg(long, default_value = "Done")]
pub done_label: String,
#[arg(long, default_value = "Failed")]
pub fail_label: String,
}
#[derive(clap::Args)]
pub struct PipeOpts {
#[arg(short, long)]
pub total: Option<u64>,
#[arg(long)]
pub lines: bool,
#[arg(long, default_value = "8192")]
pub buffer_size: usize,
#[arg(short, long, default_value = "Piping")]
pub label: String,
}