solarboat/
lib.rs

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    // ASCII art for 'Solarboat' (user-provided, each line a different color)
12    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    // Show banner only if --help or help is present as a top-level arg
35    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    // Initialize logger with CLI settings
43    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}