cargo-setupx 0.1.0

Rust-based CLI and library that automates the initial setup of new Rust projects with modular configuration packs
Documentation
//! CLI command runner

use super::args::SetupxArgs;
use super::confirm::confirm_setup;
use cargo_setupx::{apply_packs, Config};
use std::process;

/// Run the setupx command with provided arguments
pub fn run_setupx(args: SetupxArgs) -> anyhow::Result<()> {
    // Validate at least one pack is selected
    if !args.quality && !args.hooks && args.arch.is_none() && !args.all {
        eprintln!("❌ No packs selected. Use --quality, --hooks, --arch, or --all");
        eprintln!();
        eprintln!("Examples:");
        eprintln!("  cargo setupx --quality --hooks");
        eprintln!("  cargo setupx --arch=clean");
        eprintln!("  cargo setupx --all");
        eprintln!();
        eprintln!("Run 'cargo setupx --help' for more information.");
        process::exit(1);
    }

    let config = if args.all {
        Config {
            quality: true,
            hooks: true,
            arch: Some("clean".to_string()),
            force: args.force,
            yes: args.yes,
        }
    } else {
        Config {
            quality: args.quality,
            hooks: args.hooks,
            arch: args.arch,
            force: args.force,
            yes: args.yes,
        }
    };

    // Confirmation prompt if not --yes
    if !config.yes && !confirm_setup(&config)? {
        println!("❌ Setup cancelled.");
        return Ok(());
    }

    apply_packs(&config, &args.path)?;

    Ok(())
}