use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum ArgumentType {
String,
Number,
Path,
Url,
Email,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ArgumentSpec {
pub name: String,
pub description: Option<String>,
pub required: bool,
pub variadic: bool,
pub arg_type: Option<ArgumentType>,
pub placeholder: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum OptionType {
Boolean,
String,
Number,
Choice,
Path,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct OptionSpec {
pub short_flags: Vec<String>,
pub long_flags: Vec<String>,
pub description: Option<String>,
pub option_type: OptionType,
pub required: bool,
pub default_value: Option<String>,
pub takes_argument: bool,
pub argument_name: Option<String>,
pub choices: Vec<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
pub enum ValidationType {
Pattern,
Range,
Choice,
Required,
Format,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ValidationRule {
pub target: String,
pub rule_type: ValidationType,
pub pattern: Option<String>,
pub min: Option<f64>,
pub max: Option<f64>,
pub message: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct EnvVarSpec {
pub name: String,
pub description: Option<String>,
pub option_mapped: Option<String>,
pub default_value: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Example {
pub command: String,
pub description: Option<String>,
pub tags: Vec<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct SubcommandSpec {
pub name: String,
pub description: Option<String>,
pub full_path: String,
pub parent: Option<String>,
pub options: Vec<OptionSpec>,
pub arguments: Vec<ArgumentSpec>,
pub subcommands: Vec<SubcommandSpec>,
}
#[derive(Debug, Serialize)]
pub struct CommandTree {
pub command: String,
pub options: Vec<OptionSpec>,
pub arguments: Vec<ArgumentSpec>,
pub subcommands: Vec<SubcommandSpec>,
pub total_commands: usize,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ProbeResult {
pub command: String,
pub args: Vec<String>,
pub exit_code: Option<i32>,
pub timed_out: bool,
pub help_flag_detected: bool,
pub usage_blocks: Vec<String>,
pub options: Vec<OptionSpec>,
pub subcommands: Vec<SubcommandSpec>,
pub arguments: Vec<ArgumentSpec>,
pub examples: Vec<Example>,
pub environment_variables: Vec<EnvVarSpec>,
pub validation_rules: Vec<ValidationRule>,
pub raw_stdout: String,
pub raw_stderr: String,
}