tidepool_version_manager/lib.rs
1// 运行时版本管理模块入口
2pub mod go;
3
4// 内部下载器模块(原 tidepool-downloader)
5pub mod downloader;
6
7// 跨平台符号链接统一接口模块
8pub mod symlink;
9
10// 重新导出 GoVersionInfo
11pub use go::GoVersionInfo;
12
13// 未来可扩展其他语言版本管理
14// pub mod python;
15// pub mod nodejs;
16
17use std::path::PathBuf;
18
19pub enum Runtime {
20 Go,
21 // 未来可扩展: Python, Nodejs
22}
23
24/// 版本信息结构体
25#[derive(Debug, Clone)]
26pub struct VersionInfo {
27 pub version: String,
28 pub install_path: PathBuf,
29}
30
31/// 安装请求
32#[derive(Debug, Clone)]
33pub struct InstallRequest {
34 /// 要安装的版本号
35 pub version: String,
36 /// 安装目录
37 pub install_dir: PathBuf,
38 /// 下载目录(由调用方管理,可能是缓存目录)
39 pub download_dir: PathBuf,
40 /// 是否强制重新安装
41 pub force: bool,
42}
43
44/// 切换版本请求
45#[derive(Debug, Clone)]
46pub struct SwitchRequest {
47 /// 目标版本号
48 pub version: String,
49 /// 版本管理根目录
50 pub base_dir: PathBuf,
51 /// 是否全局设置
52 pub global: bool,
53 /// 是否强制切换
54 pub force: bool,
55}
56
57/// 卸载请求
58#[derive(Debug, Clone)]
59pub struct UninstallRequest {
60 /// 要卸载的版本号
61 pub version: String,
62 /// 版本管理根目录
63 pub base_dir: PathBuf,
64}
65
66/// 列出已安装版本请求
67#[derive(Debug, Clone)]
68pub struct ListInstalledRequest {
69 /// 版本管理根目录
70 pub base_dir: PathBuf,
71}
72
73/// 状态查询请求
74#[derive(Debug, Clone)]
75pub struct StatusRequest {
76 /// 版本管理根目录(可选)
77 pub base_dir: Option<PathBuf>,
78}
79
80/// 运行时状态信息
81#[derive(Debug, Clone)]
82pub struct RuntimeStatus {
83 pub current_version: Option<String>,
84 pub install_path: Option<PathBuf>,
85 pub environment_vars: std::collections::HashMap<String, String>,
86 pub link_info: Option<String>,
87}
88
89/// 版本列表响应
90#[derive(Debug, Clone)]
91pub struct VersionList {
92 pub versions: Vec<String>,
93 pub total_count: usize,
94}
95
96// 通用版本管理接口,将来可以为Python、Node.js等实现
97#[async_trait::async_trait]
98pub trait VersionManager {
99 /// 安装指定版本
100 ///
101 /// # 参数
102 /// - `request`: 安装请求,包含版本号、安装目录、下载目录等信息
103 ///
104 /// # 返回
105 /// - `Ok(VersionInfo)`: 安装成功,返回版本信息
106 /// - `Err(String)`: 安装失败,返回错误信息
107 async fn install(&self, request: InstallRequest) -> Result<VersionInfo, String>;
108
109 /// 切换到指定版本
110 ///
111 /// # 参数
112 /// - `request`: 切换请求,包含版本号、根目录、配置等信息 ///
113 /// # 返回
114 /// - `Ok(())`: 切换成功
115 /// - `Err(String)`: 切换失败,返回错误信息
116 ///
117 /// # Errors
118 ///
119 /// Returns an error if the version switch operation fails
120 fn switch_to(&self, request: SwitchRequest) -> Result<(), String>;
121
122 /// 卸载指定版本 ///
123 /// # 参数
124 /// - `request`: 卸载请求,包含版本号和根目录
125 ///
126 /// # 返回
127 /// - `Ok(())`: 卸载成功
128 /// - `Err(String)`: 卸载失败,返回错误信息
129 ///
130 /// # Errors
131 ///
132 /// Returns an error if the uninstall operation fails
133 fn uninstall(&self, request: UninstallRequest) -> Result<(), String>;
134
135 /// 列出已安装的版本
136 ///
137 /// # 参数 /// - `request`: 列出请求,包含根目录
138 ///
139 /// # 返回
140 /// - `Ok(VersionList)`: 成功,返回版本列表
141 /// - `Err(String)`: 失败,返回错误信息
142 ///
143 /// # Errors
144 ///
145 /// Returns an error if the list operation fails
146 fn list_installed(&self, request: ListInstalledRequest) -> Result<VersionList, String>;
147
148 /// 列出可用的版本
149 ///
150 /// # 返回
151 /// - `Ok(VersionList)`: 成功,返回版本列表
152 /// - `Err(String)`: 失败,返回错误信息
153 async fn list_available(&self) -> Result<VersionList, String>;
154
155 /// 获取当前运行时状态
156 ///
157 /// # 参数 /// - `request`: 状态查询请求,包含可选的根目录
158 ///
159 /// # 返回
160 /// - `Ok(RuntimeStatus)`: 成功,返回状态信息
161 /// - `Err(String)`: 失败,返回错误信息
162 ///
163 /// # Errors
164 ///
165 /// Returns an error if the status query fails
166 fn status(&self, request: StatusRequest) -> Result<RuntimeStatus, String>;
167}