tencentcloud_sms/api/statistics/sms_packages_statistics/
request.rs

1use 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}