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.to_string(),
59                docker_upgrade_version_latest: api::endpoints::DOCKER_UPGRADE_VERSION_LATEST
60                    .to_string(),
61                service_upgrade_history: api::endpoints::SERVICE_UPGRADE_HISTORY.to_string(),
62                telemetry: api::endpoints::TELEMETRY.to_string(),
63            },
64        }
65    }
66}
67
68impl ApiConfig {
69    /// 获取完整的端点URL
70    pub fn get_endpoint_url(&self, endpoint: &str) -> String {
71        format!("{}{}", self.base_url, endpoint)
72    }
73
74    /// 获取客户端注册完整URL
75    pub fn get_client_register_url(&self) -> String {
76        self.get_endpoint_url(&self.endpoints.client_register)
77    }
78
79    /// 获取公告列表完整URL
80    pub fn get_announcements_url(&self) -> String {
81        self.get_endpoint_url(&self.endpoints.announcements)
82    }
83
84    /// 获取Docker版本检查完整URL
85    pub fn get_docker_check_version_url(&self) -> String {
86        self.get_endpoint_url(&self.endpoints.docker_check_version)
87    }
88
89    /// 获取Docker版本列表更新完整URL
90    pub fn get_docker_update_version_list_url(&self) -> String {
91        self.get_endpoint_url(&self.endpoints.docker_update_version_list)
92    }
93
94    /// 获取Docker完整服务包下载完整URL
95    pub fn get_docker_download_full_url(&self) -> String {
96        self.get_endpoint_url(&self.endpoints.docker_download_full)
97    }
98
99    /// 获取服务升级历史完整URL(替换service_name占位符)
100    pub fn get_service_upgrade_history_url(&self, service_name: &str) -> String {
101        let endpoint = self
102            .endpoints
103            .service_upgrade_history
104            .replace("{service_name}", service_name);
105        self.get_endpoint_url(&endpoint)
106    }
107
108    /// 获取遥测数据上报完整URL
109    pub fn get_telemetry_url(&self) -> String {
110        self.get_endpoint_url(&self.endpoints.telemetry)
111    }
112
113    /// 获取所有端点信息,用于CLI帮助显示
114    pub fn get_endpoints_info(&self) -> Vec<(&str, String)> {
115        vec![
116            ("服务器地址", self.base_url.clone()),
117            ("客户端注册", self.get_client_register_url()),
118            ("获取公告", self.get_announcements_url()),
119            ("检查Docker版本", self.get_docker_check_version_url()),
120            ("Docker版本列表", self.get_docker_update_version_list_url()),
121            ("下载Docker更新", self.get_docker_download_full_url()),
122            ("上报遥测数据", self.get_telemetry_url()),
123        ]
124    }
125}
126
127impl fmt::Display for ApiConfig {
128    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
129        writeln!(f, "当前API配置:")?;
130        writeln!(f, "服务器地址: {}", self.base_url)?;
131        writeln!(f, "\n主要端点:")?;
132        for (name, url) in self.get_endpoints_info() {
133            writeln!(f, "  {name}: {url}")?;
134        }
135        Ok(())
136    }
137}