Skip to content

Commit

Permalink
🎨 cargo clippy & fmt
Browse files Browse the repository at this point in the history
  • Loading branch information
phidiaLam committed Jun 6, 2024
1 parent 7bb3054 commit 2a164cc
Show file tree
Hide file tree
Showing 7 changed files with 76 additions and 48 deletions.
40 changes: 27 additions & 13 deletions middle-server/tencent-cloud-server/src/cdn/purge_urls_cache.rs
Original file line number Diff line number Diff line change
@@ -1,24 +1,38 @@
use serde::Serialize;

use crate::{cloud_manager::CloudManager, common_parameters::{self, CommonParameter, RequestContent, TcCloudResponse}, error::TcCloudError};
use crate::{
cloud_manager::CloudManager,
common_parameters::{CommonParameter, RequestContent, TcCloudResponse},
error::TcCloudError,
};

#[derive(Debug, Clone, Serialize)]
struct PurgeUrlsCache {
#[serde(rename="Urls")]
urls: Vec<String>
#[serde(rename = "Urls")]
urls: Vec<String>,
}

impl CloudManager {
pub async fn purge_urls_cache(&self, paths: Vec<String>) -> Result<TcCloudResponse, TcCloudError> {
pub async fn purge_urls_cache(
&self, paths: Vec<String>,
) -> Result<TcCloudResponse, TcCloudError> {
let urls = paths
.into_iter()
.map(|path| format!("{}{}", self.cdn_base_url, path))
.collect();
let payload = PurgeUrlsCache { urls };

let urls = paths.into_iter().map(|path| format!("{}{}", self.cdn_base_url, path)).collect();
let payload = PurgeUrlsCache {
urls
};

let common_params = CommonParameter::builder().service("cdn".to_string()).version("2018-06-06".to_string()).action("PurgeUrlsCache".to_string()).build();
let request = RequestContent::builder().payload(payload).content_type("application/json; charset=utf-8".to_string()).query("".to_string()).build();
let common_params = CommonParameter::builder()
.service("cdn".to_string())
.version("2018-06-06".to_string())
.action("PurgeUrlsCache".to_string())
.build();
let request = RequestContent::builder()
.payload(payload)
.content_type("application/json; charset=utf-8".to_string())
.query("".to_string())
.build();

Self::common_request(&self, &common_params, &request).await
Self::common_request(self, &common_params, &request).await
}
}
}
24 changes: 20 additions & 4 deletions middle-server/tencent-cloud-server/src/cloud_manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,15 @@ pub struct PartCloudManagerState {
}

impl PartCloudManagerState {
pub(crate) fn new(id: Arc<SecretString>, key: Arc<SecretString>, cdn_base_url: Arc<String>) -> Self {
Self { id, key, cdn_base_url }
pub(crate) fn new(
id: Arc<SecretString>, key: Arc<SecretString>,
cdn_base_url: Arc<String>,
) -> Self {
Self {
id,
key,
cdn_base_url,
}
}
}

Expand All @@ -26,10 +33,19 @@ pub struct CloudManager {

impl CloudManager {
pub fn new_from_state(
PartCloudManagerState { id, key , cdn_base_url}: PartCloudManagerState,
PartCloudManagerState {
id,
key,
cdn_base_url,
}: PartCloudManagerState,
client: RequestClient,
) -> Self {
Self { id, key, cdn_base_url, client }
Self {
id,
key,
cdn_base_url,
client,
}
}
}

Expand Down
34 changes: 19 additions & 15 deletions middle-server/tencent-cloud-server/src/common_parameters.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
use std::fmt::format;

use chrono::{DateTime, Utc};
use general_request_client::Method;
use hmac::{digest::InvalidLength, Hmac, Mac};
Expand All @@ -9,8 +7,8 @@ use sha2::{Digest, Sha256};
use typed_builder::TypedBuilder;

use crate::{
cloud_manager::CloudManager, config::TencentConfigTrait,
error::TcCloudError, requester::TencentCloudRequester,
cloud_manager::CloudManager, error::TcCloudError,
requester::TencentCloudRequester,
};

#[derive(Debug, Clone, TypedBuilder)]
Expand Down Expand Up @@ -42,7 +40,7 @@ pub struct RequestContent<P: Serialize, Q: Serialize + Clone> {
#[derive(Debug, Clone, TypedBuilder, Deserialize)]
pub struct TcCloudResponse {
#[serde(rename = "Response")]
pub response: ResponseInfo
pub response: ResponseInfo,
}

#[derive(Debug, Clone, TypedBuilder, Deserialize)]
Expand All @@ -63,7 +61,6 @@ pub struct ErrorInfo {
pub message: String,
}


fn sha256hex(s: &str) -> String {
let mut hasher = Sha256::new();
hasher.update(s.as_bytes());
Expand All @@ -82,7 +79,8 @@ fn hmacsha256(s: &str, key: &str) -> Result<String, InvalidLength> {
impl CloudManager {
/// 腾讯云签名函数,签名参考:https://cloud.tencent.com/document/api/228/30978
fn sign<P: Serialize, Q: Serialize + Clone>(
&self, common_params: &CommonParameter, request: &RequestContent<P, Q>,
&self, common_params: &CommonParameter,
request: &RequestContent<P, Q>,
) -> Result<String, TcCloudError> {
let algorithm = String::from("TC3-HMAC-SHA256");
// URI 参数,API 3.0 固定为正斜杠(/)。
Expand All @@ -103,7 +101,7 @@ impl CloudManager {

let canonical_request = format!(
"{}\n{}\n{}\n{}\n{}\n{}",
request.method.to_string(),
request.method,
canonical_uri,
canonical_query,
canonical_headers,
Expand Down Expand Up @@ -145,15 +143,19 @@ impl CloudManager {

/// 通用请求
pub(crate) async fn common_request<P: Serialize, Q: Serialize + Clone>(
&self, common_params: &CommonParameter, request: &RequestContent<P, Q>,
&self, common_params: &CommonParameter,
request: &RequestContent<P, Q>,
) -> Result<TcCloudResponse, TcCloudError> {
let authorization = self.sign(&common_params, &request)?;
let authorization = self.sign(common_params, request)?;

let mut payload_buffer = Vec::<u8>::new();
serde_json::to_writer(&mut payload_buffer, &request.payload)?;

let requester = TencentCloudRequester::builder()
.url(format!("https://{}.tencentcloudapi.com", common_params.service))
.url(format!(
"https://{}.tencentcloudapi.com",
common_params.service
))
.method(request.method.clone())
.query(request.query.clone())
.payload(payload_buffer)
Expand All @@ -172,11 +174,13 @@ impl CloudManager {
let payload = resp.bytes().await?;
println!("{}", String::from_utf8_lossy(&payload));

let resp =
serde_json::from_slice::<TcCloudResponse>(&payload)?;
let resp = serde_json::from_slice::<TcCloudResponse>(&payload)?;

if let Some(error_info) = resp.response.error {
return Err(TcCloudError::TcCloud{code: error_info.code, msg: error_info.message});
return Err(TcCloudError::TcCloud {
code: error_info.code,
msg: error_info.message,
});
}

Ok(resp)
Expand Down
2 changes: 0 additions & 2 deletions middle-server/tencent-cloud-server/src/config.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
use general_request_client::Url;

pub trait TencentConfigTrait {
fn get_secret_id(&self) -> &str;
fn get_secret_key(&self) -> &str;
Expand Down
2 changes: 1 addition & 1 deletion middle-server/tencent-cloud-server/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
pub mod cdn;
pub mod axum_starter;
pub mod cdn;
pub mod cloud_manager;
mod common_parameters;
pub mod config;
Expand Down
15 changes: 3 additions & 12 deletions src/configs/tc_cloud_config.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
use serde::Deserialize;
use tencent_cloud_server::config::TencentConfigTrait;
use url::Url;



#[derive(Debug, Deserialize)]
pub struct TcCloudConfig {
Expand All @@ -17,15 +14,9 @@ pub struct Cdn {
}

impl TencentConfigTrait for TcCloudConfig {
fn get_secret_id(&self) -> &str {
&self.secret_id
}
fn get_secret_id(&self) -> &str { &self.secret_id }

fn get_secret_key(&self) -> &str {
&self.secret_key
}
fn get_secret_key(&self) -> &str { &self.secret_key }

fn get_cdn_base_url(&self) -> &str {
&self.cdn.url
}
fn get_cdn_base_url(&self) -> &str { &self.cdn.url }
}
7 changes: 6 additions & 1 deletion src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,12 @@ use bootstrap::{
};
use ceobe_qiniu_upload::QiniuUpload;
use configs::{
auth_config::AuthConfig, cors_config::CorsConfigImpl, mob_config::MobPushConfig, qiniu_secret::QiniuUploadConfig, qq_channel::QqChannelConfig, resp_result_config::RespResultConfig, schedule_notifier_config::ScheduleNotifierConfig, tc_cloud_config::TcCloudConfig, GlobalConfig, CONFIG_FILE_JSON, CONFIG_FILE_TOML, CONFIG_FILE_YAML
auth_config::AuthConfig, cors_config::CorsConfigImpl,
mob_config::MobPushConfig, qiniu_secret::QiniuUploadConfig,
qq_channel::QqChannelConfig, resp_result_config::RespResultConfig,
schedule_notifier_config::ScheduleNotifierConfig,
tc_cloud_config::TcCloudConfig, GlobalConfig, CONFIG_FILE_JSON,
CONFIG_FILE_TOML, CONFIG_FILE_YAML,
};
use figment::providers::{Env, Format, Json, Toml, Yaml};
use general_request_client::axum_starter::RequestClientPrepare;
Expand Down

0 comments on commit 2a164cc

Please sign in to comment.