use clap::{Args, Parser, Subcommand, ValueEnum};
#[derive(Debug, Parser)]
#[command(
name = "ropt",
version,
about = "Interactive CLI option configuration tool",
long_about = "ropt lets you define command-line options declaratively and \
drive interactive prompts from shell scripts."
)]
pub struct Cli {
#[command(subcommand)]
pub command: Command,
}
#[derive(Debug, Subcommand)]
pub enum Command {
Begin,
End(SessionArgs),
Push(PushArgs),
Append(PushArgs),
Pop(SessionArgs),
Execute(ExecuteArgs),
Read(ReadArgs),
Show(ShowArgs),
}
#[derive(Debug, Args)]
pub struct SessionArgs {
#[arg(long, env = "ROPT_SESSION")]
pub session: Option<String>,
}
#[derive(Debug, Args)]
pub struct PushArgs {
pub node_type: String,
#[arg(long)]
pub name: Option<String>,
#[arg(long)]
pub description: Option<String>,
#[arg(long)]
pub message: Option<String>,
#[arg(long, value_name = "STYLE")]
pub render: Option<String>,
#[arg(long)]
pub multiple: bool,
#[arg(long)]
pub value: Option<String>,
#[arg(long)]
pub label: Option<String>,
#[arg(long)]
pub default: bool,
#[arg(long)]
pub disabled: bool,
#[arg(long, value_name = "CHAR")]
pub short: Option<char>,
#[arg(long = "type", value_name = "TYPE")]
pub input_type: Option<String>,
#[arg(long)]
pub validate_regex: Option<String>,
#[arg(long)]
pub validate_min: Option<f64>,
#[arg(long)]
pub validate_max: Option<f64>,
#[arg(long = "default-value")]
pub default_value: Option<String>,
#[arg(long)]
pub sensitive: bool,
#[arg(long, env = "ROPT_SESSION")]
pub session: Option<String>,
}
#[derive(Debug, Clone, ValueEnum, Default)]
pub enum OutputFormat {
#[default]
Json,
Sh,
Raw,
}
#[derive(Debug, Args)]
pub struct ExecuteArgs {
#[arg(long, value_enum, default_value = "json")]
pub format: OutputFormat,
#[arg(long, default_value = "")]
pub prefix: String,
#[arg(long, env = "ROPT_SESSION")]
pub session: Option<String>,
}
#[derive(Debug, Args)]
pub struct ReadArgs {
#[arg(long)]
pub key: String,
#[arg(long, env = "ROPT_SESSION")]
pub session: Option<String>,
}
#[derive(Debug, Clone, ValueEnum, Default)]
pub enum ShowFormat {
#[default]
Tree,
Json,
}
#[derive(Debug, Args)]
pub struct ShowArgs {
#[arg(long, value_enum, default_value = "tree")]
pub format: ShowFormat,
#[arg(long, env = "ROPT_SESSION")]
pub session: Option<String>,
}