cargo-mate 1.7.5

Rust development companion that enhances cargo with intelligent workflows, state management, performance optimization, and comprehensive project monitoring.
Documentation
pub mod captain;
pub mod captain_log;
pub mod captain_status;
pub mod config;
pub mod embedder;
pub mod license;
pub mod license_guard;
pub mod optimize;
pub mod parser;
pub mod shell_integration;
pub mod tide;
pub mod treasure_map;
pub mod version;
pub mod version_commands;
pub mod wtf;
use anyhow::Result;
use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(name = "captain")]
#[command(about = "Advanced captain binary with real implementations")]
pub struct CaptainCli {
    #[command(subcommand)]
    pub command: Option<CaptainCommands>,
    #[arg(trailing_var_arg = true)]
    pub args: Vec<String>,
}
#[derive(Subcommand, Debug, Clone)]
pub enum CaptainCommands {
    Install,
    Update,
    Status,
    Run { args: Vec<String> },
}
pub fn run_captain() -> Result<()> {
    let cli = CaptainCli::parse();
    match cli.command {
        Some(CaptainCommands::Install) => {
            log::info!("🚢 Installing captain binary...");
            crate::cmd::captain::auto_install_captain()?;
            log::info!("✅ Captain binary installed successfully!");
            Ok(())
        }
        Some(CaptainCommands::Update) => {
            log::info!("🚢 Updating captain binary...");
            crate::cmd::captain::auto_install_captain()?;
            log::info!("✅ Captain binary updated successfully!");
            Ok(())
        }
        Some(CaptainCommands::Status) => {
            let status = captain_status::get_captain_status();
            log::info!("🚢 Captain Status:");
            log::info!(
                "   Installed: {}", if status.is_installed { "✅ Yes" } else { "❌ No"
                }
            );
            if let Some(path) = status.binary_path {
                log::info!("   Location: {}", path.display());
            }
            log::info!(
                "   Version: {}", status.version.unwrap_or_else(|| "Unknown".to_string())
            );
            Ok(())
        }
        Some(CaptainCommands::Run { args }) => {
            let args_refs: Vec<&str> = args.iter().map(|s| s.as_str()).collect();
            let output = embedder::extract_and_execute_captain(&args_refs)?;
            if !output.stdout.is_empty() {
                print!("{}", String::from_utf8_lossy(& output.stdout));
            }
            if !output.stderr.is_empty() {
                eprint!("{}", String::from_utf8_lossy(& output.stderr));
            }
            Ok(())
        }
        None => {
            if cli.args.is_empty() {
                log::info!("🚢 Captain - Advanced CLI tool");
                log::info!("   Use 'captain --help' for more information");
                Ok(())
            } else {
                let args_refs: Vec<&str> = cli.args.iter().map(|s| s.as_str()).collect();
                let output = embedder::extract_and_execute_captain(&args_refs)?;
                if !output.stdout.is_empty() {
                    print!("{}", String::from_utf8_lossy(& output.stdout));
                }
                if !output.stderr.is_empty() {
                    eprint!("{}", String::from_utf8_lossy(& output.stderr));
                }
                Ok(())
            }
        }
    }
}