use crate::codegen::ConfigDumpContent;
use clap::{Args, Parser, Subcommand};
use std::path::PathBuf;
#[derive(Debug, Parser)]
#[command(author, version, about, long_about = None)]
pub(crate) struct Cli {
#[arg(short, long)]
pub verbose: bool,
#[command(subcommand)]
pub(crate) command: Commands,
}
#[allow(clippy::large_enum_variant)]
#[derive(Debug, Subcommand)]
pub(crate) enum Commands {
Generate(GenerateCommandArgs),
Create(CreateCommandArgs),
Integrate(IntegrateCommandArgs),
BuildWeb(BuildWebCommandArgs),
#[clap(hide = true)]
InternalGenerate(InternalGenerateCommandArgs),
}
#[derive(Debug, Args, Default, Eq, PartialEq)]
pub(crate) struct GenerateCommandArgs {
#[arg(long)]
pub watch: bool,
#[clap(flatten)]
pub primary: GenerateCommandArgsPrimary,
}
#[derive(Debug, Args, Default, Eq, PartialEq, Clone)]
pub(crate) struct GenerateCommandArgsPrimary {
#[arg(long)]
pub config_file: Option<String>,
#[arg(short, long)]
pub rust_input: Option<String>,
#[arg(short, long)]
pub dart_output: Option<String>,
#[arg(short, long)]
pub c_output: Option<String>,
#[arg(long)]
pub duplicated_c_output: Option<Vec<String>>,
#[arg(long)]
pub rust_root: Option<String>,
#[arg(long)]
pub rust_output: Option<String>,
#[arg(long)]
pub dart_entrypoint_class_name: Option<String>,
#[arg(long)]
pub dart_format_line_length: Option<u32>,
#[arg(long)]
pub no_dart_enums_style: bool,
#[arg(long)]
pub no_add_mod_to_lib: bool,
#[arg(long, num_args = 1..)]
pub llvm_path: Option<Vec<String>>,
#[arg(long)]
pub llvm_compiler_opts: Option<String>,
#[arg(long, num_args = 1..)]
pub dart_root: Option<String>,
#[arg(long)]
pub no_build_runner: bool,
#[arg(long)]
pub extra_headers: Option<String>,
#[arg(long)]
pub no_web: bool,
#[arg(long)]
pub no_deps_check: bool,
#[arg(long)]
pub default_external_library_loader_web_prefix: Option<String>,
#[arg(long)]
pub no_dart3: bool,
#[arg(long, value_enum, num_args = 0.., default_missing_values = ["config", "ir"])]
pub dump: Option<Vec<ConfigDumpContent>>,
#[arg(long)]
pub dump_all: bool,
}
#[derive(Debug, Args)]
pub(crate) struct CreateCommandArgs {
pub(crate) name: String,
#[clap(flatten)]
pub common: CreateOrIntegrateCommandCommonArgs,
}
#[derive(Debug, Args)]
pub(crate) struct IntegrateCommandArgs {
#[arg(long)]
pub(crate) no_enable_integration_test: bool,
#[clap(flatten)]
pub common: CreateOrIntegrateCommandCommonArgs,
}
#[derive(Debug, Args)]
pub(crate) struct CreateOrIntegrateCommandCommonArgs {
#[arg(long, hide = true)]
pub local: bool,
}
#[derive(Debug, Args)]
#[command(disable_help_flag = true)]
pub(crate) struct BuildWebCommandArgs {
#[arg(long)]
pub dart_root: Option<PathBuf>,
#[arg(long, hide = true)]
pub dart_coverage: bool,
#[arg(trailing_var_arg = true, allow_hyphen_values = true, hide = true)]
pub(crate) args: Vec<String>,
}
#[derive(Debug, Args)]
pub(crate) struct InternalGenerateCommandArgs {}