Skip to main content

oss_api_client/api_client/
oss_api_client_utils.rs

1use 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
14/// 初始化OssFileApi
15pub 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}