use clap::{Args, Parser, Subcommand};
use humantime::parse_duration;
use std::time::Duration;
#[derive(Args, Clone, Default)]
pub struct AwsArgs {
#[arg(short, long, global = true)]
pub profile: Option<String>,
#[arg(short, long, global = true)]
pub workgroup: Option<String>,
#[arg(short, long, global = true)]
pub database: Option<String>,
#[arg(long, global = true)]
pub catalog: Option<String>,
#[arg(long, global = true)]
pub region: Option<String>,
#[arg(long, global = true)]
pub output_location: Option<String>,
}
#[derive(Args, Clone, Default)]
pub struct DisplayArgs {
#[arg(short, long, global = true)]
pub quiet: bool,
}
#[derive(Args, Clone)]
pub struct OutputArgs {
#[arg(short, long)]
pub output: Option<String>,
}
#[derive(Parser)]
#[command(author, version, about, long_about = None)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
#[command(flatten)]
pub aws: AwsArgs,
#[command(flatten)]
pub display: DisplayArgs,
}
#[derive(Subcommand)]
pub enum Commands {
Query(QueryArgs),
Database {
#[command(subcommand)]
command: DatabaseCommands,
},
Table {
#[command(subcommand)]
command: TableCommands,
},
Workgroup {
#[command(subcommand)]
command: WorkgroupCommands,
},
History(HistoryArgs),
Inspect(InspectArgs),
#[command(alias = "dl")] Download(DownloadArgs),
}
#[derive(Subcommand)]
pub enum DatabaseCommands {
List(DatabaseArgs),
}
#[derive(Subcommand)]
pub enum TableCommands {
List(TableArgs),
Describe(DescribeTableArgs),
}
#[derive(Subcommand)]
pub enum WorkgroupCommands {
List(WorkgroupArgs),
}
#[derive(Args, Clone)]
pub struct QueryArgs {
#[command(flatten)]
pub aws: AwsArgs,
pub query: String,
#[arg(short = 'r', long, value_parser = parse_duration, default_value = "60m")]
pub reuse_time: Duration,
}
#[derive(Args, Clone)]
pub struct DatabaseArgs {
#[command(flatten)]
pub aws: AwsArgs,
}
#[derive(Args, Clone)]
pub struct TableArgs {
#[arg(short = 'n', long)]
pub db: Option<String>,
#[arg(short, long)]
pub filter: Option<String>,
#[arg(short, long, default_value = "50")]
pub limit: i32,
}
#[derive(Args, Clone)]
pub struct DescribeTableArgs {
pub table: String,
#[arg(short = 'n', long)]
pub db: Option<String>,
}
#[derive(Args, Clone)]
pub struct WorkgroupArgs {
#[arg(short, long, default_value = "50")]
pub limit: i32,
}
#[derive(Args, Clone)]
pub struct HistoryArgs {
#[arg(short, long)]
pub limit: Option<i32>,
#[arg(short, long)]
pub status: Option<String>,
}
#[derive(Args, Clone)]
pub struct InspectArgs {
pub query_id: String,
#[arg(short, long)]
pub output: Option<String>,
#[arg(short, long)]
pub quiet: bool,
}
#[derive(Args, Clone)]
pub struct DownloadArgs {
pub query_id: String,
#[arg(short, long, default_value = ".")]
pub output: Option<String>,
}