1use clap::{Parser, Subcommand};
2
3#[derive(Parser)]
4#[command(name = "mammoth-cli")]
5#[command(about = "Mammoth - A powerful frontend project scaffolding CLI tool")]
6#[command(version)]
7pub struct Cli {
8 #[arg(short, long)]
10 pub verbose: bool,
11
12 #[command(subcommand)]
13 pub command: Option<Commands>,
14}
15
16#[derive(Subcommand)]
17pub enum Commands {
18 New {
20 #[arg(short, long)]
22 template: Option<String>,
23
24 #[arg(short, long)]
26 name: Option<String>,
27
28 #[arg(short, long, default_value = ".")]
30 output: String,
31 },
32 Clean {
34 #[arg(short, long)]
36 all: bool,
37
38 #[arg(short, long)]
40 force: bool,
41 },
42 Info {
44 #[arg(short, long)]
46 json: bool,
47 },
48 Template {
50 #[command(subcommand)]
51 command: TemplateCommands,
52 },
53 Repo {
55 #[command(subcommand)]
56 command: RepoCommands,
57 },
58 Config {
60 #[command(subcommand)]
61 command: ConfigCommands,
62 },
63}
64
65#[derive(Subcommand)]
66pub enum TemplateCommands {
67 List {
69 #[arg(short, long)]
71 verbose: bool,
72 },
73 Download {
75 template_id: String,
77
78 #[arg(short, long)]
80 force: bool,
81 },
82 DownloadAll {
84 #[arg(short, long)]
86 force: bool,
87 },
88 Add {
90 template_id: String,
92
93 #[arg(short, long)]
95 name: String,
96
97 #[arg(short, long)]
99 repo: String,
100
101 #[arg(short, long)]
103 path: String,
104
105 #[arg(short, long)]
107 description: String,
108
109 #[arg(short, long, default_value = "vue")]
111 language: String,
112
113 #[arg(short, long)]
115 tags: Option<String>,
116 },
117 Remove {
119 template_id: String,
121 },
122}
123
124#[derive(Subcommand)]
125pub enum RepoCommands {
126 Add {
128 repo_name: String,
130
131 #[arg(short, long)]
133 url: String,
134
135 #[arg(short, long, default_value = "main")]
137 branch: String,
138 },
139 Remove {
141 repo_name: String,
143 },
144 List,
146}
147
148#[derive(Subcommand)]
149pub enum ConfigCommands {
150 Export {
152 #[arg(short, long)]
154 output: String,
155
156 #[arg(short, long)]
158 include_cache: bool,
159 },
160 Import {
162 #[arg(short, long)]
164 file: String,
165
166 #[arg(short, long, default_value = "merge")]
168 mode: String,
169
170 #[arg(short, long)]
172 skip_validation: bool,
173 },
174 Validate {
176 file: String,
178 },
179}