my_helper/cli/
args.rs

1use clap::{Parser, Subcommand};
2use std::path::PathBuf;
3
4#[derive(Parser)]
5#[command(
6    author,
7    version,
8    about = "文件处理工具集",
9    long_about = "一个用于文件复制和 JSON 处理的命令行工具"
10)]
11pub struct Cli {
12    #[command(subcommand)]
13    pub command: Commands,
14
15    /// 要忽略的目录列表,例如: --ignore-dirs node_modules --ignore-dirs .git
16    #[arg(long = "ignore-dirs", global = true, value_delimiter = ' ')]
17    pub ignore_dirs: Option<Vec<String>>,
18}
19
20#[derive(Subcommand)]
21pub enum Commands {
22    /// 复制文件到目标位置
23    Copy {
24        /// 源文件路径,支持正则,例如: ./(?<lang>[a-z-]{2,}/.*\.json)
25        #[arg(short, long)]
26        from: PathBuf,
27
28        /// 目标路径,例如: ./other/$lang/
29        #[arg(short, long)]
30        to: PathBuf,
31
32        /// 是否跳过已存在的文件
33        #[arg(long, default_value_t = false)]
34        skip_exist: bool,
35    },
36    /// 修改 JSON 文件内容
37    ModifyJson {
38        /// 源文件路径
39        #[arg(short, long)]
40        from: PathBuf,
41
42        /// 目标路径
43        #[arg(short, long)]
44        to: PathBuf,
45
46        /// JSON 路径表达式,例如: $.meta.*
47        #[arg(short = 'p', long)]
48        json_path: String,
49
50        /// 是否跳过已存在的文件
51        #[arg(long, default_value_t = false)]
52        skip_exist: bool,
53    },
54}