mint_cli/data/
args.rs

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    /// Parses the version stack from the raw slash-separated string.
66    /// Handles fallback from deprecated --variant flag.
67    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}