use clap::Parser;
#[derive(Parser, Debug)]
#[command(
name = "pick",
version,
about = "Extract values from anything",
long_about = "A universal extraction tool for JSON, YAML, TOML, .env, HTTP headers, logfmt, CSV, and more.\n\nExamples:\n curl -s api.com/user | pick profile.email\n cat .env | pick DATABASE_URL\n cat server.log | pick request_id\n docker inspect ctr | pick '[0].State.Status'\n cat data.json | pick 'items[*] | select(.price > 100) | name'\n cat config.yaml | pick 'set(.version, \"2.0\")'"
)]
pub struct Cli {
pub selector: Option<String>,
#[arg(short, long, value_enum, default_value = "auto")]
pub input: InputFormat,
#[arg(short, long, value_enum, default_value = "auto")]
pub output: OutputFormat,
#[arg(short, long)]
pub file: Option<String>,
#[arg(long)]
pub json: bool,
#[arg(long)]
pub raw: bool,
#[arg(short = '1', long)]
pub first: bool,
#[arg(long)]
pub lines: bool,
#[arg(short, long)]
pub default: Option<String>,
#[arg(short, long)]
pub quiet: bool,
#[arg(short, long)]
pub exists: bool,
#[arg(short, long)]
pub count: bool,
#[arg(long)]
pub stream: bool,
}
#[derive(clap::ValueEnum, Clone, Debug, PartialEq)]
pub enum InputFormat {
Auto,
Json,
Yaml,
Toml,
Env,
Headers,
Logfmt,
Csv,
Text,
}
#[derive(clap::ValueEnum, Clone, Debug, PartialEq)]
pub enum OutputFormat {
Auto,
Json,
Yaml,
Toml,
}