1mod handlers;
2mod types;
3mod utils;
4
5use clap::CommandFactory;
6use crossterm::style::Stylize;
7use types::*;
8use handlers::{
9 general::*,
10 aliases::*,
11 create_project::*,
12 command_aliases::*,
13 errors::CliErr
14};
15
16use crate::utils::parse_path;
17
18pub fn cli_run() -> Result<(), CliErr> {
19 let args = Cli::parse();
20
21 match args.command {
22 Some(Commands::Setup(cmd)) => {
23 if let Err(e) = handlers::setup::setup(cmd.verbose) {
24 eprintln!("{e}");
25 }
26 },
27 Some(Commands::General(cmd)) => {
28 let path = match parse_path::parse_path(cmd.path.clone()) {
29 Ok(s) => s,
30 Err(e) => {
31 eprintln!("{e}");
32 cmd.path
33 }
34 };
35
36 if cmd.current_user {
37 let home_path = if cfg!(windows) {
38 "%USER/"
39 } else {
40 "~/"
41 };
42 println!(
43 "{}: the {} (or {}) flag is no longer necessary.\nYou can specify whether the directory is in user/home using: {}your_dir",
44 "Deprecated".yellow(),
45 "--current-user".red(),
46 "-C".red(),
47 home_path.green()
48 );
49 }
50 if cmd.alias {
51 println!(
52 "{}: the {} (or {}) flag is no longer necessary.\nYou can specify whether is an alias using {}. (e.g. {})",
53 "Deprecated".yellow(),
54 "--alias".red(),
55 "--al".red(),
56 ":".green(),
57 ":cdpproject/src".green()
58 );
59 }
60 if cmd.ls {
61 if let Err(e) = ls::ls(path.clone()) {
62 eprintln!("{e}");
63 }
64 }
65 if cmd.vsc {
66 println!(
67 "{}: the {} flag is no longer necessary. Use {} (or {}) instead. (e.g. {})",
68 "Deprecated".yellow(),
69 "--vsc".red(),
70 "--editor".green(),
71 "-E".green(),
72 r#"cdp general ":cdptests/assets" -E vsc"#.green()
73 );
74 }
75 if cmd.editor.is_some() {
76 if let Err(e) = editors::open_editor(Editors::Vsc, path.clone()) {
77 eprintln!("{e}");
78 }
79 }
80 },
81 Some(Commands::Aliases(cmd)) => {
82 if let (Some(path), Some(alias)) = (cmd.path, cmd.alias) {
83 if let Err(e) = aliases::aliases(path, alias) {
84 eprintln!("{e}");
85 }
86 }
87 if let Some(edit) = cmd.edit {
88 if let Err(e) = edit::parse_response(edit) {
89 eprintln!("{e}");
90 }
91 }
92 if let Some(remove) = cmd.remove {
93 if let Err(e) = remove::remove_alias(remove) {
94 eprintln!("{e}");
95 }
96 }
97 if cmd.list {
98 if let Err(e) = list::list_aliases() {
99 eprintln!("{e}");
100 }
101 }
102 },
103 Some(Commands::CreateProject(cmd)) => {
104 if let Err(e) = create_project::create_project(
105 cmd.lang,
106 cmd.name,
107 cmd.alias,
108 cmd.path,
109 ) {
110 eprintln!("{e}");
111 }
112 },
113 Some(Commands::CommandAliases(cmd)) => {
114 if let (Some(command), Some(alias)) = (cmd.cmd, cmd.alias) {
115 if let Err(e) = cmd_aliases::cmd_aliases(command, alias) {
116 eprintln!("{e}");
117 }
118 }
119 if let Some(exe) = cmd.execute {
120 if let Err(e) = execute::execute_alias(exe) {
121 eprintln!("{e}");
122 }
123 }
124 if cmd.list {
125 if let Err(e) = cmd_list::list_cmd_aliases() {
126 eprintln!("{e}");
127 }
128 }
129 if let Some(edit) = cmd.edit {
130 if let Err(e) = edit_cmd::parse_response(edit) {
131 eprintln!("{e}");
132 }
133 }
134 if let Some(remove) = cmd.remove {
135 if let Err(e) = remove_cmd::remove_alias(remove) {
136 eprintln!("{e}");
137 }
138 }
139 },
140 None => { Cli::command().print_help().unwrap(); std::process::exit(1); }
141 }
142
143 Ok(())
144}