cargo-mate 1.7.5

Rust development companion that enhances cargo with intelligent workflows, state management, performance optimization, and comprehensive project monitoring.
Documentation
use anyhow::{Context, Result};
use std::process::Command;
use colored::*;
pub struct Captain;
impl Captain {
    pub fn run_command(args: &[&str]) -> Result<()> {
        println!(
            "🚢 {}", "Running captain command requires advanced binary".bright_blue()
        );
        println!("   Delegating to real captain implementation...");
        Self::delegate_to_captain(args.to_vec())
    }
    pub fn get_status() -> Result<()> {
        println!("🚢 {}", "Captain status requires advanced binary".bright_blue());
        Self::delegate_to_captain(vec!["status"])
    }
    pub fn show_version() -> Result<()> {
        println!(
            "🚢 {}", "Version information requires advanced binary".bright_blue()
        );
        Self::delegate_to_captain(vec!["version"])
    }
    pub fn show_help() -> Result<()> {
        println!("🚢 {}", "Help information requires advanced binary".bright_blue());
        Self::delegate_to_captain(vec!["help"])
    }
    pub fn initialize() -> Result<()> {
        println!(
            "🚢 {}", "Captain initialization requires advanced binary".bright_blue()
        );
        Self::delegate_to_captain(vec!["init"])
    }
    pub fn self_update() -> Result<()> {
        println!("🚢 {}", "Self-update requires advanced binary".bright_blue());
        Self::delegate_to_captain(vec!["update"])
    }
    fn delegate_to_captain(args: Vec<&str>) -> Result<()> {
        let captain_path = match crate::captain::captain_status::find_captain_binary() {
            Some(path) => path,
            None => {
                println!("{}", "Advanced captain binary not found".red().bold());
                println!(
                    "🔄 {}", "Auto-downloading captain binary from get.cargo.do/"
                    .cyan()
                );
                match crate::captain::captain_status::auto_download_captain() {
                    Ok(path) => path,
                    Err(e) => {
                        println!(
                            "{}", format!("Failed to download captain: {}", e) .red()
                        );
                        println!("💡 {}", "Please run: cm captain install".cyan());
                        println!("   Or upgrade at: https://cargo.do/pro");
                        println!();
                        println!(
                            "💡 {}", "Captain features require the advanced binary:"
                            .cyan()
                        );
                        println!("   • Command execution and processing");
                        println!("   • Status monitoring and reporting");
                        println!("   • Version management and updates");
                        println!("   • Advanced initialization");
                        return Ok(());
                    }
                }
            }
        };
        let output = Command::new(&captain_path)
            .args(&args)
            .output()
            .context("Failed to execute captain binary")?;
        if !output.stdout.is_empty() {
            print!("{}", String::from_utf8_lossy(& output.stdout));
        }
        if !output.stderr.is_empty() {
            eprint!("{}", String::from_utf8_lossy(& output.stderr));
        }
        if !output.status.success() {
            println!(
                "{}", format!("Captain binary exited with status: {}", output.status)
                .red()
            );
        }
        Ok(())
    }
}
pub fn execute_captain_command(command: &str, args: &[&str]) -> Result<()> {
    println!(
        "🚢 {}", format!("Executing '{}' requires advanced binary", command)
        .bright_blue()
    );
    Captain::run_command(args)
}
pub fn get_captain_info() -> Result<String> {
    println!("🚢 {}", "Captain information requires advanced binary".bright_blue());
    Captain::delegate_to_captain(vec!["info"])
        .map(|_| "Advanced captain information available".to_string())
}