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