1use clap::{Parser, Subcommand, ValueEnum};
2use std::path::PathBuf;
3
4#[derive(Debug, Copy, Clone, ValueEnum)]
5pub enum OutputFormat {
6 #[clap(name = "text")]
7 Text,
8 #[clap(name = "json")]
9 Json,
10 #[clap(name = "yaml")]
11 Yaml,
12 #[clap(name = "csv")]
13 Csv,
14 #[clap(name = "markdown")]
15 Markdown,
16 #[clap(name = "toml")]
17 Toml,
18}
19
20#[derive(Parser, Debug)]
21#[clap(
22 name = "conda-env-inspect",
23 version,
24 author = "Dishank Chauhan <dishankchauhan@gmail.com>",
25 about = "A tool for analyzing Conda environment files",
26 long_about = "A Rust-based CLI tool for analyzing Conda environment files, identifying dependencies, and providing optimization recommendations."
27)]
28pub struct Cli {
29 #[clap(default_value = "environment.yml")]
31 pub file: PathBuf,
32
33 #[clap(short, long, value_enum, default_value = "text")]
35 pub format: OutputFormat,
36
37 #[clap(short, long)]
39 pub output: Option<PathBuf>,
40
41 #[clap(short, long)]
43 pub check_outdated: bool,
44
45 #[clap(short = 'p', long)]
47 pub flag_pinned: bool,
48
49 #[clap(short, long)]
51 pub generate_graph: bool,
52
53 #[clap(short = 'G', long)]
55 pub graph_output: Option<PathBuf>,
56
57 #[clap(short = 'r', long)]
59 pub generate_recommendations: bool,
60
61 #[clap(subcommand)]
62 pub command: Option<Commands>,
63}
64
65#[derive(Subcommand, Debug)]
66pub enum Commands {
67 Analyze {
69 #[clap(default_value = "environment.yml")]
71 file: PathBuf,
72
73 #[clap(short, long)]
75 check_outdated: bool,
76
77 #[clap(short = 'p', long)]
79 flag_pinned: bool,
80
81 #[clap(short, long)]
83 generate_graph: bool,
84
85 #[clap(short = 'r', long)]
87 generate_recommendations: bool,
88
89 #[clap(short = 'G', long)]
91 graph_output: Option<PathBuf>,
92
93 #[clap(short, long)]
95 interactive: bool,
96
97 #[clap(short = 'a', long)]
99 advanced_graph: bool,
100 },
101
102 Export {
104 #[clap(default_value = "environment.yml")]
106 file: PathBuf,
107
108 #[clap(short, long, value_enum, default_value = "text")]
110 format: OutputFormat,
111
112 #[clap(short = 'o', long)]
114 output: Option<PathBuf>,
115 },
116
117 Graph {
119 #[clap(default_value = "environment.yml")]
121 file: PathBuf,
122
123 #[clap(short = 'o', long, default_value = "dependency_graph.dot")]
125 output: PathBuf,
126
127 #[clap(short = 'a', long)]
129 advanced: bool,
130 },
131
132 Recommend {
134 #[clap(default_value = "environment.yml")]
136 file: PathBuf,
137
138 #[clap(short, long)]
140 check_outdated: bool,
141 },
142
143 Interactive {
145 #[clap(default_value = "environment.yml")]
147 file: PathBuf,
148
149 #[clap(short, long)]
151 check_outdated: bool,
152
153 #[clap(short = 'a', long)]
155 advanced_graph: bool,
156 },
157
158 Vulnerabilities {
160 #[clap(default_value = "environment.yml")]
162 file: PathBuf,
163 },
164}