use clap::Parser;
use std::path::PathBuf;
#[derive(Parser, Debug)]
pub struct Cli {
#[clap(subcommand)]
pub subcommand: SubCommand,
#[clap(flatten)]
pub config_args: ConfigArgs,
}
#[derive(Parser, Debug)]
pub enum SubCommand {
Init(InitArgs),
Import(ImportArgs),
Project(ProjectArgs),
Branch(BranchArgs),
Update(UpdateArgs),
Export(ExportArgs),
Clean(CleanArgs),
Doc(DocArgs),
Completions(CompletionsArgs),
Version(VersionArgs),
}
#[derive(Parser, Debug)]
pub struct ConfigArgs {
#[clap(short, long, global = true)]
pub directory: Option<PathBuf>,
#[clap(short, long, global = true)]
pub verbose: bool,
}
#[derive(Debug, Parser)]
pub struct InitArgs {
pub modpack_name: Option<String>,
#[clap(short = 'G', long)]
pub no_git_repo: bool,
#[clap(short, long)]
pub force: bool,
}
#[derive(Debug, Parser)]
pub struct ImportArgs {
pub modrinth_pack: PathBuf,
#[clap(short = 'p', long)]
pub add_projects: bool,
#[clap(short, long)]
pub force: bool,
#[clap(short = 'D', long)]
pub allow_dirty: bool,
}
#[derive(Debug, Parser)]
pub struct ProjectArgs {
#[clap(subcommand)]
pub command: Option<ProjectSubCommand>,
pub projects: Option<Vec<String>>,
}
#[derive(Parser, Debug)]
pub enum ProjectSubCommand {
#[clap(visible_alias = "ls")]
List(ListProjectsArgs),
Add(AddProjectsArgs),
VersionOverride(VersionOverrideProjectArgs),
Inclusions(InclusionsProjectArgs),
Exclusions(ExclusionsProjectArgs),
#[clap(visible_alias = "rm")]
Remove(RemoveProjectsArgs),
}
#[derive(Parser, Debug)]
pub struct ListProjectsArgs;
#[derive(Parser, Debug)]
pub struct AddProjectsArgs {
#[allow(clippy::doc_markdown)]
#[arg(required = true)]
pub projects: Vec<String>,
#[clap(short, long, group = "include_or_exclude")]
pub inclusions: Option<Vec<String>>,
#[clap(short, long, group = "include_or_exclude")]
pub exclusions: Option<Vec<String>>,
}
#[derive(Parser, Debug)]
pub struct VersionOverrideProjectArgs {
#[clap(subcommand)]
pub command: VersionOverrideSubCommand,
}
#[derive(Parser, Debug)]
pub enum VersionOverrideSubCommand {
Add(AddVersionOverrideArgs),
#[clap(visible_alias = "rm")]
Remove(RemoveVersionOverrideArgs),
}
#[derive(Parser, Debug)]
pub struct AddVersionOverrideArgs {
pub project: String,
pub branch: String,
#[allow(clippy::doc_markdown)]
pub project_version_id: String,
}
#[derive(Parser, Debug)]
pub struct RemoveVersionOverrideArgs {
pub project: String,
pub branch: Option<String>,
#[clap(short, long)]
pub all: bool,
}
#[derive(Parser, Debug)]
pub struct InclusionsProjectArgs {
#[clap(subcommand)]
pub command: InclusionsSubCommand,
}
#[derive(Parser, Debug)]
pub enum InclusionsSubCommand {
Add(AddInclusionsArgs),
#[clap(visible_alias = "rm")]
Remove(RemoveInclusionsArgs),
}
#[derive(Parser, Debug)]
pub struct AddInclusionsArgs {
pub project: String,
#[arg(required = true)]
pub inclusions: Vec<String>,
}
#[derive(Parser, Debug)]
pub struct RemoveInclusionsArgs {
pub project: String,
pub inclusions: Option<Vec<String>>,
#[clap(short, long)]
pub all: bool,
}
#[derive(Parser, Debug)]
pub struct ExclusionsProjectArgs {
#[clap(subcommand)]
pub command: ExclusionsSubCommand,
}
#[derive(Parser, Debug)]
pub enum ExclusionsSubCommand {
Add(AddExclusionsArgs),
#[clap(visible_alias = "rm")]
Remove(RemoveExclusionsArgs),
}
#[derive(Parser, Debug)]
pub struct AddExclusionsArgs {
pub project: String,
#[arg(required = true)]
pub exclusions: Vec<String>,
}
#[derive(Parser, Debug)]
pub struct RemoveExclusionsArgs {
pub project: String,
pub exclusions: Option<Vec<String>>,
#[clap(short, long)]
pub all: bool,
}
#[derive(Parser, Debug)]
pub struct RemoveProjectsArgs {
#[arg(required = true)]
pub projects: Vec<String>,
}
#[allow(clippy::struct_excessive_bools)]
#[derive(Debug, Parser)]
pub struct UpdateArgs {
pub branches: Option<Vec<String>>,
#[clap(long)]
pub no_alpha: bool,
#[clap(long)]
pub no_beta: bool,
#[clap(short, long)]
pub require_all: bool,
#[clap(short, long)]
pub auto_dependencies: bool,
#[clap(short = 'D', long)]
pub allow_dirty: bool,
}
#[derive(Debug, Parser)]
pub struct BranchArgs {
#[clap(subcommand)]
pub command: Option<BranchSubCommand>,
pub branches: Option<Vec<String>>,
}
#[derive(Parser, Debug)]
pub enum BranchSubCommand {
#[clap(visible_alias = "ls")]
List(ListBranchesArgs),
#[clap(visible_alias = "new")]
Add(AddBranchesArgs),
#[clap(visible_alias = "rm")]
Remove(RemoveBranchesArgs),
}
#[derive(Parser, Debug)]
pub struct ListBranchesArgs;
#[derive(Parser, Debug)]
pub struct AddBranchesArgs {
#[arg(required = true)]
pub branches: Vec<String>,
}
#[derive(Parser, Debug)]
pub struct RemoveBranchesArgs {
#[arg(required = true)]
pub branches: Vec<String>,
}
#[derive(Parser, Debug)]
pub struct ExportArgs {
pub branches: Option<Vec<String>>,
}
#[derive(Parser, Debug)]
pub struct CleanArgs;
#[derive(Parser, Debug)]
pub struct DocArgs {
#[clap(short, long)]
pub table_only: bool,
#[clap(short = 'C', long)]
pub no_compatibility_icons: bool,
}
#[derive(Parser, Debug)]
pub struct CompletionsArgs {
pub shell: CompletionShell,
}
#[derive(clap::ValueEnum, Debug, Clone)]
pub enum CompletionShell {
Bash,
Elvish,
Fish,
#[clap(name = "powershell")]
PowerShell,
Zsh,
}
#[derive(Parser, Debug)]
pub struct VersionArgs;