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
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 pub fn get_endpoint_url(&self, endpoint: &str) -> String {
72 format!("{}{}", self.base_url, endpoint)
73 }
74
75 pub fn get_client_register_url(&self) -> String {
77 self.get_endpoint_url(&self.endpoints.client_register)
78 }
79
80 pub fn get_announcements_url(&self) -> String {
82 self.get_endpoint_url(&self.endpoints.announcements)
83 }
84
85 pub fn get_docker_check_version_url(&self) -> String {
87 self.get_endpoint_url(&self.endpoints.docker_check_version)
88 }
89
90 pub fn get_docker_update_version_list_url(&self) -> String {
92 self.get_endpoint_url(&self.endpoints.docker_update_version_list)
93 }
94
95 pub fn get_docker_download_full_url(&self) -> String {
97 self.get_endpoint_url(&self.endpoints.docker_download_full)
98 }
99
100 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 pub fn get_telemetry_url(&self) -> String {
111 self.get_endpoint_url(&self.endpoints.telemetry)
112 }
113
114 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}