composition-cli 2.1.1

composition is a modular lines-of-code CLI tool to analyze and display code composition in directories
mod context;
mod core;
mod display;

use clap::Parser;
use colored::Colorize;
use std::time::Instant;

use crate::{
    context::{AppContext, cli::Cli},
    core::{get_all_entries, get_composition},
    display::{display_composition, spinner},
};

fn main() {
    let cli = Cli::parse();
    let app_context = AppContext::from_cli(cli);
    if !app_context.config_loaded {
        println!(
            "{}",
            "Warning: Missing or invalid config.toml file. Using default settings."
                .yellow()
                .bold()
        );
    }

    let start = Instant::now();

    spinner::start("Walking directory...");
    let entries = get_all_entries(&app_context);
    let entries_len = entries.len();
    spinner::end();

    spinner::start("Calculating composition...");
    let mut composition = get_composition(&app_context, entries);
    spinner::end();

    let elapsed = start.elapsed();

    println!(
        "{}",
        format!(
            "Parsed {} files in {:.6} seconds",
            entries_len,
            elapsed.as_secs_f64()
        )
        .bold()
    );

    display_composition(&app_context, &mut composition);
}