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::ArcSwapOption;
3use config::Value;
4use robotech::api_client::{ApiClientConfig, API_CLIENT_CONFIG_KEY};
5use robotech::cfg::CfgError;
6use robotech::micro_svc::FeignClient;
7use std::collections::HashMap;
8use std::sync::Arc;
9use tracing::info;
10use wheel_rs::config_utils::has_config_changed;
11
12static OSS_API_CLIENT: ArcSwapOption<OssApiClient> = ArcSwapOption::const_empty();
13
14pub struct OssApiClient {
15    pub file_client: OssFileApiClient,
16}
17
18pub fn get_oss_api_client() -> Result<Arc<OssApiClient>, CfgError> {
19    OSS_API_CLIENT
20        .load_full()
21        .ok_or(CfgError::NotInit("OSS_API_CLIENT not initialized".to_string()))
22}
23
24pub async fn setup_oss_api_client(
25    api_config: HashMap<String, ApiClientConfig>,
26    changed: &Option<HashMap<String, Value>>,
27) {
28    info!("setup oss api client...: {api_config:?}");
29    if changed
30        .as_ref()
31        .map(|changed| has_config_changed(API_CLIENT_CONFIG_KEY, changed))
32        .unwrap_or(true)
33    {
34        let oss_api_client = FeignClient::new_default("oss-svr").await;
35        OSS_API_CLIENT.store(Some(Arc::new(OssApiClient {
36            file_client: OssFileApiClient::new(oss_api_client),
37        })));
38    }
39}