msvc-kit 0.2.10

A portable MSVC Build Tools installer and manager for Rust development
# InstallInfo


已安装组件(MSVC 或 SDK)的信息。

## 定义


```rust
pub struct InstallInfo {
    /// 组件类型:"msvc" 或 "sdk"
    pub component_type: String,
    
    /// 已安装版本
    pub version: String,
    
    /// 安装路径
    pub install_path: PathBuf,
    
    /// 已下载文件列表
    pub downloaded_files: Vec<PathBuf>,
    
    /// 目标架构
    pub arch: Architecture,
}
```

## 方法


### 验证


```rust
/// 检查安装是否有效(路径存在)
pub fn is_valid(&self) -> bool;

/// 获取已下载文件的总大小
pub fn total_size(&self) -> u64;
```

### 路径访问器


```rust
/// 获取此组件的 bin 目录
pub fn bin_dir(&self) -> PathBuf;

/// 获取此组件的 include 目录
pub fn include_dir(&self) -> PathBuf;

/// 获取此组件的 lib 目录
pub fn lib_dir(&self) -> PathBuf;
```

### 导出


```rust
/// 导出安装信息为 JSON
pub fn to_json(&self) -> serde_json::Value;
```

## 使用示例


### 基本用法


```rust
use msvc_kit::{download_msvc, DownloadOptions};

let options = DownloadOptions::default();
let info = download_msvc(&options).await?;

println!("组件: {}", info.component_type);  // "msvc"
println!("版本: {}", info.version);         // "14.44.34823"
println!("路径: {:?}", info.install_path);
println!("有效: {}", info.is_valid());
println!("大小: {} 字节", info.total_size());
```

### 访问目录


```rust
let info = download_msvc(&options).await?;

// 获取特定目录
let bin = info.bin_dir();          // .../bin/Hostx64/x64
let include = info.include_dir();  // .../include
let lib = info.lib_dir();          // .../lib/x64

println!("cl.exe 应该在: {:?}", bin.join("cl.exe"));
```

### 导出为 JSON


```rust
let info = download_msvc(&options).await?;
let json = info.to_json();

println!("{}", serde_json::to_string_pretty(&json)?);
```

输出:
```json
{
  "component_type": "msvc",
  "version": "14.44.34823",
  "install_path": "C:\\msvc-kit\\VC\\Tools\\MSVC\\14.44.34823",
  "bin_dir": "C:\\msvc-kit\\VC\\Tools\\MSVC\\14.44.34823\\bin\\Hostx64\\x64",
  "include_dir": "C:\\msvc-kit\\VC\\Tools\\MSVC\\14.44.34823\\include",
  "lib_dir": "C:\\msvc-kit\\VC\\Tools\\MSVC\\14.44.34823\\lib\\x64",
  "arch": "x64",
  "is_valid": true,
  "total_size": 1234567890
}
```

### MSVC 与 SDK 路径


MSVC 和 SDK 的路径结构不同:

**MSVC:**
```
install_path: VC/Tools/MSVC/14.xx.xxxxx/
bin_dir:      VC/Tools/MSVC/14.xx.xxxxx/bin/Hostx64/x64/
include_dir:  VC/Tools/MSVC/14.xx.xxxxx/include/
lib_dir:      VC/Tools/MSVC/14.xx.xxxxx/lib/x64/
```

**SDK:**
```
install_path: Windows Kits/10/
bin_dir:      Windows Kits/10/bin/10.0.xxxxx.0/x64/
include_dir:  Windows Kits/10/Include/10.0.xxxxx.0/
lib_dir:      Windows Kits/10/Lib/10.0.xxxxx.0/um/x64/
```

## 序列化


`InstallInfo` 实现了 `Serialize` 和 `Deserialize`:

```rust
use serde_json;

let info = download_msvc(&options).await?;

// 序列化
let json = serde_json::to_string(&info)?;

// 反序列化
let restored: InstallInfo = serde_json::from_str(&json)?;
```