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}