cargo-mate 1.8.0

Rust development companion that enhances cargo with intelligent workflows, state management, performance optimization, and comprehensive project monitoring.
Documentation
use anyhow::Result;
use colored::*;
use clap::Subcommand;
use crate::version::{VersionManager, IncrementPolicy};
#[derive(Subcommand, Debug)]
pub enum VersionAction {
    Init {
        #[arg(help = "Initial version number (e.g., 1.0.0)")]
        version: Option<String>,
    },
    Info,
    Increment {
        #[arg(help = "Increment type")]
        #[arg(value_enum)]
        #[arg(default_value = "patch")]
        increment_type: IncrementType,
    },
    Set { #[arg(help = "New version number")] version: String },
    History,
    UpdateCargo,
    Config { #[command(subcommand)] action: VersionConfigAction },
}
#[derive(Subcommand, Debug, Clone, clap::ValueEnum)]
pub enum IncrementType {
    Patch,
    Minor,
    Major,
}
#[derive(Subcommand, Debug)]
pub enum VersionConfigAction {
    Enable,
    Disable,
    Policy { #[arg(value_enum)] policy: IncrementType },
    Show,
}
pub fn handle_version(action: VersionAction) -> Result<()> {
    match action {
        VersionAction::Init { version } => {
            let mut manager = VersionManager::new(None)?;
            manager.init(version)?;
        }
        VersionAction::Info => {
            let manager = VersionManager::new(None)?;
            manager.show_info();
        }
        VersionAction::Increment { increment_type } => {
            let mut manager = VersionManager::new(None)?;
            let new_version = match increment_type {
                IncrementType::Patch => manager.increment()?,
                IncrementType::Minor => {
                    let original_policy = manager.config.increment_policy.clone();
                    manager.config.increment_policy = IncrementPolicy::Minor;
                    let result = manager.increment()?;
                    manager.config.increment_policy = original_policy;
                    result
                }
                IncrementType::Major => {
                    let original_policy = manager.config.increment_policy.clone();
                    manager.config.increment_policy = IncrementPolicy::Major;
                    let result = manager.increment()?;
                    manager.config.increment_policy = original_policy;
                    result
                }
            };
            println!("✅ Version incremented to: {}", new_version.cyan());
        }
        VersionAction::Set { version } => {
            let mut manager = VersionManager::new(None)?;
            manager.set_version(&version)?;
        }
        VersionAction::History => {
            println!("📚 Version history feature coming soon!");
            println!("For now, check the .v file for version changes.");
        }
        VersionAction::UpdateCargo => {
            let manager = VersionManager::new(None)?;
            manager.update_cargo_toml()?;
        }
        VersionAction::Config { action } => {
            match action {
                VersionConfigAction::Enable => {
                    let mut manager = VersionManager::new(None)?;
                    manager.config.auto_increment = true;
                    manager.save_config()?;
                    println!("✅ Auto-increment enabled");
                }
                VersionConfigAction::Disable => {
                    let mut manager = VersionManager::new(None)?;
                    manager.config.auto_increment = false;
                    manager.save_config()?;
                    println!("✅ Auto-increment disabled");
                }
                VersionConfigAction::Policy { policy } => {
                    let mut manager = VersionManager::new(None)?;
                    manager.config.increment_policy = match policy {
                        IncrementType::Patch => IncrementPolicy::Patch,
                        IncrementType::Minor => IncrementPolicy::Minor,
                        IncrementType::Major => IncrementPolicy::Major,
                    };
                    manager.save_config()?;
                    println!("✅ Increment policy updated");
                }
                VersionConfigAction::Show => {
                    let manager = VersionManager::new(None)?;
                    manager.show_info();
                }
            }
        }
    }
    Ok(())
}