tencentcloud_sms/api/statistics/sms_packages_statistics/
request.rs1use super::response::{ResponseBody, SmsPackageInfo, SmsPackagesStatisticsResponse};
2use crate::SmsResult;
3use crate::api::common::ApiRequest;
4use crate::logging::{debug, error, info};
5use serde::Serialize;
6use typed_builder::TypedBuilder;
7use validator::Validate;
8
9#[derive(Debug, Clone, Serialize, TypedBuilder, Validate)]
10#[serde(rename_all = "PascalCase")]
11pub struct SmsPackagesStatisticsRequest {
12 #[validate(length(min = 1, message = "SmsSdkAppId不能为空"))]
13 #[builder(setter(transform = |id: impl Into<String>| id.into()))]
14 sms_sdk_app_id: String,
15
16 #[validate(range(min = 1, max = 100, message = "Limit必须在1-100之间"))]
17 #[builder(default = 100)]
18 limit: u32,
19
20 #[validate(range(min = 0, message = "Offset不能为负数"))]
21 #[builder(default = 0)]
22 offset: u32,
23}
24
25impl ApiRequest for SmsPackagesStatisticsRequest {
26 type Response = SmsPackagesStatisticsResponse;
27 type Output = Vec<SmsPackageInfo>;
28 const ACTION: &'static str = "SmsPackagesStatistics";
29
30 fn parse_response(response_text: &str) -> SmsResult<Self::Response> {
31 serde_json::from_str(response_text).map_err(Into::into)
32 }
33
34 fn handle_response(response: Self::Response) -> SmsResult<Self::Output> {
35 match response.response {
36 ResponseBody::Success(success) => {
37 debug!("API 返回成功响应,request_id: {}", success.request_id);
38 info!(
39 "查询到 {} 个套餐包",
40 success.sms_packages_statistics_set.len()
41 );
42 Ok(success.sms_packages_statistics_set)
43 }
44 ResponseBody::Error(api_error) => {
45 error!(
46 "API 返回错误响应,request_id: {}, 错误码: {}",
47 api_error.request_id, api_error.error.code
48 );
49 Err(crate::api::common::classify_error(
50 &api_error.error.code,
51 &api_error.error.message,
52 api_error.request_id,
53 ))
54 }
55 }
56 }
57}