cdp_cli/
lib.rs

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}