resolver_cli/
lib.rs

1use std::fs;
2use git2::Repository;
3use std::error::Error;
4use colored::*;
5
6pub mod utils;
7use utils::helpers::*;
8use utils::constants::*;
9pub use utils::command_arguments::*;
10
11
12pub fn resolve(args: ClapperArgs) -> Result<(), Box<dyn Error>> {
13    match args.entity_type {
14        EntityType::Get(get_command) => {
15            match get_command.command {
16                GetSubCommand::Dhjs(dir) => {
17                    match Repository::clone(GIT_DIAMOND_HARDHAT_JS_URL, &dir.dir_name) {
18                        Ok(_) => {
19                            println!("{}", "Successfully cloned diamond standard hardhat JS project!".bright_blue());
20                            remove_git_dir(&dir.dir_name);
21                        },
22                        Err(e) => {
23                            return Err(format!("Failed to clone project: {}", e).into())
24                        }
25                    }
26                },
27                GetSubCommand::Dhts(dir) => {
28                    match Repository::clone(GIT_DIAMOND_HARDHAT_TS_URL, &dir.dir_name) {
29                        Ok(_) => {
30                            println!("{}", "Successfully cloned diamond standard hardhat TS project!".bright_blue());
31                            remove_git_dir(&dir.dir_name);
32                        },
33                        Err(e) => {
34                            return Err(format!("Failed to clone project: {}", e).into())
35                        }
36                    }
37                },
38                GetSubCommand::Dfd(dir) => {
39                    match Repository::clone(GIT_DIAMOND_FOUNDRY_URL, &dir.dir_name) {
40                        Ok(_) => {
41                            println!("{}", "Successfully cloned diamond standard foundry project!".bright_blue());
42                            remove_git_dir(&dir.dir_name);
43                        },
44                        Err(e) => {
45                            return Err(format!("Failed to clone project: {}", e).into())
46                        }
47                    }
48                },
49                GetSubCommand::Nestjs(dir) => {
50                    match Repository::clone(GIT_NEST_JS_URL, &dir.dir_name){
51                        Ok(_) => {
52                            println!("{}", "Successfully cloned a NestJS project!".bright_blue());
53                            remove_git_dir(&dir.dir_name);
54                        },
55                        Err(e) => {
56                            return Err(format!("Failed to clone project: {}", e).into())
57                        }
58                    }
59                },
60            };
61        },
62        EntityType::Scaffold(scaffold_command) => {
63            match scaffold_command.command {
64                ScaffoldSubCommand::Reactjs(dir) => {
65                    match create_react_app(dir.dir_name.clone()) {
66                        Ok(_) => println!("{}", "Successfully created the React project!".bright_blue()),
67                        Err(e) => {
68                            return  Err(e);
69                        }
70                    }
71                },
72                ScaffoldSubCommand::Reactts(dir) => {
73                    match create_react_app_with_typescript(dir.dir_name.clone()) {
74                        Ok(_) => println!("{}", "Successfully created the TypeScript React project!".bright_blue()),
75                        Err(e) => {
76                            return  Err(e);
77                        }
78                    }
79                },
80                ScaffoldSubCommand::Hardhat(dir) => {
81                    match create_hardhat_project(dir.dir_name.clone()) {
82                        Ok(_) => println!("{}", "Successfully created the Hardhat project!".bright_blue()),
83                        Err(e) => {
84                            return  Err(e);
85                        }
86                    }
87                },
88                ScaffoldSubCommand::Nestjs(dir) => {
89                    match create_nestjs_app(dir.dir_name.clone()) {
90                        Ok(_) => println!("{}", "Successfully created the Nestjs project!".bright_blue()),
91                        Err(e) => {
92                            return  Err(e);
93                        }
94                    }
95                },
96                ScaffoldSubCommand::Laravel(dir) => {
97                    match create_laravel_project(dir.dir_name.clone()) {
98                        Ok(_) => println!("{}", "Successfully created the Laravel project!".bright_blue()),
99                        Err(e) => {
100                            return  Err(e);
101                        }
102                    }
103                },
104                ScaffoldSubCommand::Nextjs(dir) => {
105                    match create_next_app(dir.dir_name.clone()) {
106                        Ok(_) => println!("{}", "Successfully created the Next application!".bright_blue()),
107                        Err(e) => {
108                            return  Err(e);
109                        }
110                    }
111                },
112                ScaffoldSubCommand::Foundry(dir) => {
113                    match create_new_foundry_project(dir.dir_name.clone()) {
114                        Ok(_) => println!("{}", "Successfully created the Foundry application!".bright_blue()),
115                        Err(e) => {
116                            return  Err(e);
117                        }
118                    }
119                },
120                ScaffoldSubCommand::Vue(dir) => {
121                    match create_vue_project(dir.dir_name.clone()) {
122                        Ok(_) => println!("{}", "Successfully created a Vue application!".bright_blue()),
123                        Err(e) => {
124                            return  Err(e);
125                        }
126                    }
127                },
128                ScaffoldSubCommand::Vite(dir) => {
129                    match create_vite_project(dir.dir_name.clone()) {
130                        Ok(_) => println!("{}", "Successfully created a Vite project!".bright_blue()),
131                        Err(e) => {
132                            return  Err(e);
133                        }
134                    }
135                },
136                ScaffoldSubCommand::Noir(dir) => {
137                    match create_noir_project(dir.dir_name.clone()) {
138                        Ok(_) => println!("{}", "Successfully created a Noir project!".bright_blue()),
139                        Err(e) => {
140                            return  Err(e);
141                        }
142                    }
143                },
144                ScaffoldSubCommand::Snforge(dir) => {
145                    match create_starknet_foundry_project(dir.dir_name.clone()) {
146                        Ok(_) => println!("{}", "Successfully created a starknet foundry project!".bright_blue()),
147                        Err(e) => {
148                            return Err(e);
149                        }
150                    }
151                }
152            }
153        },
154        EntityType::Install(install_command) => {
155            match install_command.command {
156                InstallSubCommand::Brew => {
157                    match install_brew() {
158                        Ok(_) => println!("{}", "Homebrew installation successful!".bright_blue()),
159                        Err(e) => {
160                            return  Err(e);
161                        }
162                    }
163                },
164                InstallSubCommand::Choco => {
165                    match install_choco() {
166                        Ok(_) => println!("{}", "Chocolatey installation successful!".bright_blue()),
167                        Err(e) => {
168                            return  Err(e);
169                        }
170                    }
171                },
172                InstallSubCommand::Node => {
173                    match install_node() {
174                        Ok(_) => println!("{}", "Node.js installation successful!".bright_blue()),
175                        Err(e) => {
176                            return  Err(e);
177                        }
178                    }
179                },
180                InstallSubCommand::Scarb => {
181                    match install_scarb() {
182                        Ok(_) => println!("{}", "Scarb installation successful!".bright_blue()),
183                        Err(e) => {
184                            return  Err(e);
185                        }
186                    }
187                },
188                InstallSubCommand::Forge => {
189                    match install_forge() {
190                        Ok(_) => println!("{}", "Forge installation successful!".bright_blue()),
191                        Err(e) => {
192                            return  Err(e);
193                        }
194                    }
195                },
196                InstallSubCommand::Starkli => {
197                    match install_starkli() {
198                        Ok(_) => println!("{}", "Starkli installation successful!".bright_blue()),
199                        Err(e) => {
200                            return  Err(e);
201                        }
202                    }
203                },
204                InstallSubCommand::Noir => {
205                    match install_nargo() {
206                        Ok(_) => println!("{}", "Noturup installation successful!".bright_blue()),
207                        Err(e) => {
208                            return  Err(e);
209                        }
210                    }
211                },
212                InstallSubCommand::Snfoundry(version) => {
213                    match install_snforge(version.version_name.clone()) {
214                        Ok(_) => println!("{}", "Starknet Foundry installation successful!".bright_blue()),
215                        Err(e) => {
216                            return Err(e)
217                        }
218                    }
219                }
220            }
221        }
222    }
223
224    Ok(())
225}
226
227fn remove_git_dir(dir_name: &String) {
228    let git_dir = format!("{}/.git", dir_name);
229    if fs::remove_dir_all(&git_dir).is_err() {
230        println!("Warning: Failed to remove .git directory");
231    }
232}