use std::ffi::OsString;
use std::path::PathBuf;
use clap::{Args, Parser, Subcommand};
#[derive(Debug, Parser)]
#[command(
name = "teaql",
version,
about = "TeaQL toolchain",
disable_help_subcommand = true
)]
pub struct Cli {
#[arg(long, global = true, default_value = ".")]
pub cwd: PathBuf,
#[arg(long, global = true)]
pub input: Option<PathBuf>,
#[arg(long, global = true)]
pub endpoint_prefix: Option<String>,
#[arg(long, global = true)]
pub service_url: Option<String>,
#[arg(long, global = true)]
pub api_key: Option<String>,
#[arg(long, global = true)]
pub output: Option<PathBuf>,
#[arg(long, global = true)]
pub timeout_seconds: Option<u64>,
#[command(subcommand)]
pub command: Option<Commands>,
}
#[derive(Debug, Subcommand)]
pub enum Commands {
ShowConfig,
Config,
Ping(ServiceArgs),
InstallLinks(InstallLinksArgs),
Check(CheckArgs),
#[command(external_subcommand)]
Dynamic(Vec<OsString>),
}
#[derive(Debug, Parser)]
#[command(no_binary_name = true)]
pub struct DynamicArgs {
#[arg(trailing_var_arg = true, allow_hyphen_values = false)]
pub paths: Vec<String>,
#[arg(long)]
pub input: Option<PathBuf>,
#[arg(long)]
pub endpoint_prefix: Option<String>,
#[arg(long)]
pub service_url: Option<String>,
#[arg(long)]
pub api_key: Option<String>,
#[arg(long)]
pub output: Option<PathBuf>,
#[arg(long)]
pub timeout_seconds: Option<u64>,
}
#[derive(Debug, Args)]
pub struct CheckArgs {
#[arg(trailing_var_arg = true, allow_hyphen_values = true)]
pub cargo_args: Vec<String>,
}
#[derive(Debug, Args)]
pub struct GenerateArgs {
pub input: PathBuf,
#[arg(long)]
pub endpoint_prefix: Option<String>,
#[arg(long)]
pub service_url: Option<String>,
#[arg(long)]
pub api_key: Option<String>,
#[arg(long)]
pub output: Option<PathBuf>,
#[arg(long)]
pub timeout_seconds: Option<u64>,
}
#[derive(Debug, Args)]
pub struct GenServiceArgs {
#[command(flatten)]
pub generate_args: GenerateArgs,
#[arg(long, short = 's')]
pub service: String,
}
#[derive(Debug, Args)]
pub struct ServiceArgs {
#[arg(long)]
pub endpoint_prefix: Option<String>,
#[arg(long)]
pub service_url: Option<String>,
#[arg(long)]
pub api_key: Option<String>,
#[arg(long)]
pub timeout_seconds: Option<u64>,
}
#[derive(Debug, Args)]
pub struct InstallLinksArgs {
#[arg(long)]
pub dir: Option<PathBuf>,
#[arg(long)]
pub force: bool,
}