client_core/
api_config.rs1use crate::constants::api;
2use serde::{Deserialize, Serialize};
3use std::fmt;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct ApiEndpoints {
9 pub client_register: String,
11 pub announcements: String,
13 pub docker_check_version: String,
15 pub docker_update_version_list: String,
17
18 pub docker_version_oss_prod: String,
20
21 pub docker_version_oss_beta: String,
23
24 pub docker_upgrade_version_latest: String,
26 pub docker_download_full: String,
28 pub client_self_upgrade_history: String,
30 pub service_upgrade_history: String,
32 pub telemetry: String,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct ApiConfig {
39 pub base_url: String,
41 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 pub fn get_endpoint_url(&self, endpoint: &str) -> String {
71 format!("{}{}", self.base_url, endpoint)
72 }
73
74 pub fn get_client_register_url(&self) -> String {
76 self.get_endpoint_url(&self.endpoints.client_register)
77 }
78
79 pub fn get_announcements_url(&self) -> String {
81 self.get_endpoint_url(&self.endpoints.announcements)
82 }
83
84 pub fn get_docker_check_version_url(&self) -> String {
86 self.get_endpoint_url(&self.endpoints.docker_check_version)
87 }
88
89 pub fn get_docker_update_version_list_url(&self) -> String {
91 self.get_endpoint_url(&self.endpoints.docker_update_version_list)
92 }
93
94 pub fn get_docker_download_full_url(&self) -> String {
96 self.get_endpoint_url(&self.endpoints.docker_download_full)
97 }
98
99 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 pub fn get_telemetry_url(&self) -> String {
110 self.get_endpoint_url(&self.endpoints.telemetry)
111 }
112
113 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}