oss_api_client/api_client/
oss_api_client_utils.rs1use crate::api_client::oss_file_api_client::OssFileApiClient;
2use arc_swap::ArcSwap;
3use robotech::api_client::{ApiClient, ApiClientConfig, ApiClientError};
4use std::collections::HashMap;
5use std::sync::{Arc, OnceLock};
6use tracing::info;
7
8static OSS_API_CLIENT: OnceLock<ArcSwap<OssApiClient>> = OnceLock::new();
9
10pub struct OssApiClient {
11 pub file_client: OssFileApiClient,
12}
13
14pub fn init_oss_api_client(
16 api_config: HashMap<String, ApiClientConfig>,
17) -> Result<(), ApiClientError> {
18 info!("初始化oss的api客户端");
19 let oss_api_client = new_oss_api_client_from_config(api_config);
20 OSS_API_CLIENT
21 .set(ArcSwap::new(Arc::new(oss_api_client)))
22 .map_err(|_| ApiClientError::SetApiClient("OSS_API_CLIENT".to_string()))
23}
24
25pub fn get_oss_api_client() -> Result<Arc<OssApiClient>, ApiClientError> {
26 Ok(OSS_API_CLIENT
27 .get()
28 .ok_or(ApiClientError::GetApiClient("OSS_API_CLIENT".to_string()))?
29 .load_full()
30 .clone())
31}
32
33pub fn update_oss_api_client(
34 api_config: HashMap<String, ApiClientConfig>,
35) -> Result<(), ApiClientError> {
36 info!("更新oss的api客户端");
37 let oss_api_client = new_oss_api_client_from_config(api_config);
38 if let Some(swap) = OSS_API_CLIENT.get() {
39 swap.store(Arc::new(oss_api_client));
40 Ok(())
41 } else {
42 Err(ApiClientError::NotInit("OSS_API_CLIENT".to_string()))
43 }
44}
45
46fn new_oss_api_client_from_config(api_config: HashMap<String, ApiClientConfig>) -> OssApiClient {
47 let default_config = ApiClientConfig {
48 base_url: "http://127.0.0.1:9840".to_string(),
49 };
50 let api_client_config = api_config.get("oss").unwrap_or(&default_config).clone();
51 OssApiClient {
52 file_client: OssFileApiClient {
53 api_client: ApiClient { api_client_config },
54 },
55 }
56}