Skip to main content

client_core/
api_config.rs

1use crate::constants::api;
2use serde::{Deserialize, Serialize};
3/// API配置模块 - 内置服务器端点配置
4use std::fmt;
5
6/// API端点配置
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct ApiEndpoints {
9    /// 客户端注册端点
10    pub client_register: String,
11    /// 公告获取端点
12    pub announcements: String,
13    /// Docker版本检查端点
14    pub docker_check_version: String,
15    /// Docker版本列表更新端点
16    pub docker_update_version_list: String,
17
18    /// Docker版本JSON (OSS) - 生产环境
19    pub docker_version_oss_prod: String,
20
21    /// Docker版本JSON (OSS) - 测试/发布环境
22    pub docker_version_oss_beta: String,
23
24    /// Docker版本获取端点 (用于降级fallback)
25    pub docker_upgrade_version_latest: String,
26    /// Docker完整服务包下载端点
27    pub docker_download_full: String,
28    /// 客户端自升级历史端点
29    pub client_self_upgrade_history: String,
30    /// 服务升级历史端点
31    pub service_upgrade_history: String,
32    /// 遥测数据上报端点
33    pub telemetry: String,
34}
35
36/// API配置
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct ApiConfig {
39    /// 基础URL
40    pub base_url: String,
41    /// API端点
42    pub endpoints: ApiEndpoints,
43}
44
45impl Default for ApiConfig {
46    fn default() -> Self {
47        Self {
48            base_url: api::get_base_url(),
49            endpoints: ApiEndpoints {
50                client_register: api::endpoints::CLIENT_REGISTER.to_string(),
51                announcements: api::endpoints::ANNOUNCEMENTS.to_string(),
52                docker_check_version: api::endpoints::DOCKER_CHECK_VERSION.to_string(),
53                docker_update_version_list: api::endpoints::DOCKER_UPDATE_VERSION_LIST.to_string(),
54                docker_download_full: api::endpoints::DOCKER_DOWNLOAD_FULL.to_string(),
55                client_self_upgrade_history: api::endpoints::CLIENT_SELF_UPGRADE_HISTORY
56                    .to_string(),
57                docker_version_oss_prod: api::endpoints::DOCKER_VERSION_OSS_PROD.to_string(),
58                docker_version_oss_beta: api::endpoints::DOCKER_VERSION_OSS_BETA
59                    .to_string(),
60                docker_upgrade_version_latest: api::endpoints::DOCKER_UPGRADE_VERSION_LATEST
61                    .to_string(),
62                service_upgrade_history: api::endpoints::SERVICE_UPGRADE_HISTORY.to_string(),
63                telemetry: api::endpoints::TELEMETRY.to_string(),
64            },
65        }
66    }
67}
68
69impl ApiConfig {
70    /// 获取完整的端点URL
71    pub fn get_endpoint_url(&self, endpoint: &str) -> String {
72        format!("{}{}", self.base_url, endpoint)
73    }
74
75    /// 获取客户端注册完整URL
76    pub fn get_client_register_url(&self) -> String {
77        self.get_endpoint_url(&self.endpoints.client_register)
78    }
79
80    /// 获取公告列表完整URL
81    pub fn get_announcements_url(&self) -> String {
82        self.get_endpoint_url(&self.endpoints.announcements)
83    }
84
85    /// 获取Docker版本检查完整URL
86    pub fn get_docker_check_version_url(&self) -> String {
87        self.get_endpoint_url(&self.endpoints.docker_check_version)
88    }
89
90    /// 获取Docker版本列表更新完整URL
91    pub fn get_docker_update_version_list_url(&self) -> String {
92        self.get_endpoint_url(&self.endpoints.docker_update_version_list)
93    }
94
95    /// 获取Docker完整服务包下载完整URL
96    pub fn get_docker_download_full_url(&self) -> String {
97        self.get_endpoint_url(&self.endpoints.docker_download_full)
98    }
99
100    /// 获取服务升级历史完整URL(替换service_name占位符)
101    pub fn get_service_upgrade_history_url(&self, service_name: &str) -> String {
102        let endpoint = self
103            .endpoints
104            .service_upgrade_history
105            .replace("{service_name}", service_name);
106        self.get_endpoint_url(&endpoint)
107    }
108
109    /// 获取遥测数据上报完整URL
110    pub fn get_telemetry_url(&self) -> String {
111        self.get_endpoint_url(&self.endpoints.telemetry)
112    }
113
114    /// 获取所有端点信息,用于CLI帮助显示
115    pub fn get_endpoints_info(&self) -> Vec<(&str, String)> {
116        vec![
117            ("服务器地址", self.base_url.clone()),
118            ("客户端注册", self.get_client_register_url()),
119            ("获取公告", self.get_announcements_url()),
120            ("检查Docker版本", self.get_docker_check_version_url()),
121            ("Docker版本列表", self.get_docker_update_version_list_url()),
122            ("下载Docker更新", self.get_docker_download_full_url()),
123            ("上报遥测数据", self.get_telemetry_url()),
124        ]
125    }
126}
127
128impl fmt::Display for ApiConfig {
129    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
130        writeln!(f, "当前API配置:")?;
131        writeln!(f, "服务器地址: {}", self.base_url)?;
132        writeln!(f, "\n主要端点:")?;
133        for (name, url) in self.get_endpoints_info() {
134            writeln!(f, "  {name}: {url}")?;
135        }
136        Ok(())
137    }
138}