#!/usr/bin/env rust-script
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🚀 VX 自动安装功能演示");
println!("{}", "=".repeat(50));
println!("\n📦 场景1: 首次使用未安装的工具");
println!("命令: vx node --version");
println!("预期行为:");
println!(" 1. 检测到 node 未安装");
println!(" 2. 自动获取最新版本信息");
println!(" 3. 下载并安装 Node.js");
println!(" 4. 执行 node --version");
simulate_auto_install("node", "20.10.0")?;
println!("\n📋 场景2: 项目特定版本自动安装");
println!("项目配置 (.vx.toml):");
println!(" [tools]");
println!(" node = \"18.17.0\"");
println!(" python = \"3.11.5\"");
println!("\n命令: vx python --version");
println!("预期行为:");
println!(" 1. 读取项目配置");
println!(" 2. 检测到需要 Python 3.11.5");
println!(" 3. 自动安装指定版本");
println!(" 4. 执行 python --version");
simulate_auto_install("python", "3.11.5")?;
println!("\n⚙️ 场景3: 自动安装配置控制");
println!("全局配置 (~/.vx/config.toml):");
println!(" [auto_install]");
println!(" enabled = false");
println!("\n命令: vx go version");
println!("预期行为:");
println!(" 1. 检测到 go 未安装");
println!(" 2. 发现自动安装已禁用");
println!(" 3. 显示手动安装提示");
simulate_disabled_auto_install("go")?;
println!("\n❌ 场景4: 自动安装错误处理");
println!("命令: vx nonexistent-tool --version");
println!("预期行为:");
println!(" 1. 检测到工具不存在");
println!(" 2. 在插件注册表中查找");
println!(" 3. 未找到支持的插件");
println!(" 4. 显示友好的错误信息");
simulate_tool_not_found("nonexistent-tool")?;
println!("\n✅ 演示完成!");
println!("\n💡 关键特性总结:");
println!(" • 透明的自动安装体验");
println!(" • 智能版本选择(最新稳定版)");
println!(" • 项目特定版本支持");
println!(" • 可配置的安装行为");
println!(" • 友好的错误处理和提示");
Ok(())
}
fn simulate_auto_install(tool: &str, version: &str) -> Result<(), Box<dyn std::error::Error>> {
println!("\n🔍 检测到工具 '{}' 未安装", tool);
println!("📦 正在获取最新版本信息...");
std::thread::sleep(std::time::Duration::from_millis(500));
println!("⬇️ 正在下载 {} v{}...", tool, version);
for i in 1..=5 {
print!(" [{}{}] {}%\r", "=".repeat(i), " ".repeat(5 - i), i * 20);
std::io::Write::flush(&mut std::io::stdout())?;
std::thread::sleep(std::time::Duration::from_millis(200));
}
println!();
let install_path = format!("~/.vx/tools/{}/{}/", tool, version);
println!("📁 正在安装到 {}...", install_path);
std::thread::sleep(std::time::Duration::from_millis(300));
println!("✅ 安装完成!");
println!("🚀 执行: {} --version", tool);
println!("📤 输出: v{}", version);
Ok(())
}
fn simulate_disabled_auto_install(tool: &str) -> Result<(), Box<dyn std::error::Error>> {
println!("\n🔍 检测到工具 '{}' 未安装", tool);
println!("⚠️ 自动安装已禁用");
println!("💡 提示: 请手动安装工具:");
println!(" vx install {}", tool);
println!(" 或启用自动安装:");
println!(" vx config set auto_install.enabled true");
Ok(())
}
fn simulate_tool_not_found(tool: &str) -> Result<(), Box<dyn std::error::Error>> {
println!("\n🔍 检测到工具 '{}' 未安装", tool);
println!("🔌 在插件注册表中查找...");
std::thread::sleep(std::time::Duration::from_millis(300));
println!("❌ 未找到支持 '{}' 的插件", tool);
println!("💡 建议:");
println!(" • 检查工具名称是否正确");
println!(" • 查看支持的工具: vx list");
println!(" • 搜索可用插件: vx plugin search {}", tool);
println!(
" • 或使用系统PATH: vx --use-system-path {} --version",
tool
);
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_demo_functions() {
assert!(simulate_auto_install("test-tool", "1.0.0").is_ok());
assert!(simulate_disabled_auto_install("test-tool").is_ok());
assert!(simulate_tool_not_found("test-tool").is_ok());
}
}