1pub mod cli;
2pub mod commands;
3pub mod config;
4pub mod utils;
5
6use clap::Parser;
7use colored::*;
8use std::env;
9
10fn print_banner() {
11 let ascii = vec![
13 " _____ _ _ _ ",
14 " / ____| | | | | | | ",
15 " | (___ ___ | | __ _ _ __ | |__ ___ __ _ | |_ ",
16 " \\___ \\ / _ \\ | | / _` || '__|| '_ \\ / _ \\ / _` || __|",
17 " ____) || (_) || || (_| || | | |_) || (_) || (_| || |_ ",
18 " |_____/ \\___/ |_| \\__,_||_| |_.__/ \\___/ \\__,_| \\__|",
19 ];
20 let colors = [Color::Red, Color::Yellow, Color::Green, Color::Cyan, Color::Blue, Color::Magenta];
21 println!();
22 for (i, line) in ascii.iter().enumerate() {
23 println!("{}", line.color(colors[i % colors.len()]).bold());
24 }
25 println!();
26 println!(" {} {}", "🚤".bold().blue(), "Modern Terraform Automation for DevOps & GitOps".italic().bright_blue());
27 println!(" {}", "Happy boating ... !!!".italic().bright_green());
28 println!(" {}", "https://solarboat.io".italic().bright_purple());
29 println!();
30}
31
32pub fn run() -> Result<(), Box<dyn std::error::Error>> {
33 let args: Vec<String> = env::args().collect();
34 let show_banner = args.iter().any(|a| a == "--help" || a == "-h" || a == "help");
36 if show_banner {
37 print_banner();
38 }
39
40 let cli = cli::Args::parse();
41
42 let log_level = match cli.log_level {
44 cli::LogLevel::Silent => utils::logger::LogLevel::Silent,
45 cli::LogLevel::Error => utils::logger::LogLevel::Error,
46 cli::LogLevel::Warn => utils::logger::LogLevel::Warn,
47 cli::LogLevel::Info => utils::logger::LogLevel::Info,
48 cli::LogLevel::Debug => utils::logger::LogLevel::Debug,
49 cli::LogLevel::Trace => utils::logger::LogLevel::Trace,
50 };
51 utils::logger::init(log_level, cli.quiet);
52
53 match commands::handle_command(cli) {
54 Ok(_) => Ok(()),
55 Err(e) => {
56 utils::logger::error_box("Command Failed", &format!("{}", e));
57 Err(e.into())
58 }
59 }
60}