1use clap::Args;
2
3#[derive(Args, Debug, Clone, Default)]
4pub struct DataArgs {
5 #[arg(
6 long,
7 value_name = "FILE",
8 group = "datasource",
9 requires = "versions",
10 help = "Path to the Excel versions file"
11 )]
12 pub xlsx: Option<String>,
13
14 #[arg(long, value_name = "NAME", help = "Main sheet name in Excel")]
15 pub main_sheet: Option<String>,
16
17 #[arg(
18 long,
19 value_name = "PATH or json string",
20 group = "datasource",
21 requires = "versions",
22 help = "Path to the JSON file or a JSON string containing the postgres configuration options and template"
23 )]
24 pub postgres: Option<String>,
25
26 #[arg(
27 long,
28 value_name = "PATH or json string",
29 group = "datasource",
30 requires = "versions",
31 help = "Path to the JSON file or a JSON string containing the REST API configuration options and template"
32 )]
33 pub rest: Option<String>,
34
35 #[arg(
36 long,
37 value_name = "PATH or json string",
38 group = "datasource",
39 requires = "versions",
40 help = "Path to JSON file or JSON string. Format: object with version names as keys, each containing an object with name:value pairs (e.g., {\"VersionName\": {\"key1\": value1, \"key2\": value2}})"
41 )]
42 pub json: Option<String>,
43
44 #[arg(
45 short = 'v',
46 long,
47 value_name = "NAME[/NAME...]",
48 requires = "datasource",
49 group = "versions",
50 help = "Version columns to use in priority order (separate with '/')"
51 )]
52 pub version: Option<String>,
53
54 #[arg(
55 long,
56 value_name = "NAME[/NAME...]",
57 requires = "datasource",
58 group = "versions",
59 help = "[DEPRECATED] Use --version instead. Version columns to use in priority order (separate with '/')"
60 )]
61 pub variant: Option<String>,
62}
63
64impl DataArgs {
65 pub fn get_version_list(&self) -> Vec<String> {
68 let raw = self.version.as_deref().or(self.variant.as_deref());
69 raw.map(|r| {
70 r.split('/')
71 .map(|name| name.trim())
72 .filter(|name| !name.is_empty())
73 .map(|name| name.to_string())
74 .collect()
75 })
76 .unwrap_or_default()
77 }
78}