use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "mammoth-cli")]
#[command(about = "Mammoth - A powerful frontend project scaffolding CLI tool")]
#[command(version)]
pub struct Cli {
#[arg(short, long)]
pub verbose: bool,
#[command(subcommand)]
pub command: Option<Commands>,
}
#[derive(Subcommand)]
pub enum Commands {
New {
#[arg(short, long)]
template: Option<String>,
#[arg(short, long)]
name: Option<String>,
#[arg(short, long, default_value = ".")]
output: String,
},
Clean {
#[arg(short, long)]
all: bool,
#[arg(short, long)]
force: bool,
},
Info {
#[arg(short, long)]
json: bool,
},
Template {
#[command(subcommand)]
command: TemplateCommands,
},
Repo {
#[command(subcommand)]
command: RepoCommands,
},
Config {
#[command(subcommand)]
command: ConfigCommands,
},
}
#[derive(Subcommand)]
pub enum TemplateCommands {
List {
#[arg(short, long)]
verbose: bool,
},
Download {
template_id: String,
#[arg(short, long)]
force: bool,
},
DownloadAll {
#[arg(short, long)]
force: bool,
},
Add {
template_id: String,
#[arg(short, long)]
name: String,
#[arg(short, long)]
repo: String,
#[arg(short, long)]
path: String,
#[arg(short, long)]
description: String,
#[arg(short, long, default_value = "vue")]
language: String,
#[arg(short, long)]
tags: Option<String>,
},
Remove {
template_id: String,
},
}
#[derive(Subcommand)]
pub enum RepoCommands {
Add {
repo_name: String,
#[arg(short, long)]
url: String,
#[arg(short, long, default_value = "main")]
branch: String,
},
Remove {
repo_name: String,
},
List,
}
#[derive(Subcommand)]
pub enum ConfigCommands {
Export {
#[arg(short, long)]
output: String,
#[arg(short, long)]
include_cache: bool,
},
Import {
#[arg(short, long)]
file: String,
#[arg(short, long, default_value = "merge")]
mode: String,
#[arg(short, long)]
skip_validation: bool,
},
Validate {
file: String,
},
}