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}