tencentcloud_sms/api/statistics/send_status_statistics/
request.rs

1use super::response::{ResponseBody, SendStatistics, SendStatusStatisticsResponse};
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 SendStatusStatisticsRequest {
12    #[validate(length(
13        equal = 10,
14        message = "BeginTime格式错误,应为yyyymmddhh(10位数字字符串)"
15    ))]
16    #[builder(setter(transform = |time: impl Into<String>| time.into()))]
17    begin_time: String,
18
19    #[validate(length(
20        equal = 10,
21        message = "EndTime格式错误,应为yyyymmddhh(10位数字字符串)"
22    ))]
23    #[builder(setter(transform = |time: impl Into<String>| time.into()))]
24    end_time: String,
25
26    #[validate(length(min = 1, message = "SmsSdkAppId不能为空"))]
27    #[builder(setter(transform = |id: impl Into<String>| id.into()))]
28    sms_sdk_app_id: String,
29
30    #[validate(range(min = 1, max = 100, message = "Limit必须在1-100之间"))]
31    limit: u32,
32
33    #[validate(range(min = 0, message = "Offset不能为负数"))]
34    #[builder(default = 0)]
35    offset: u32,
36}
37
38impl ApiRequest for SendStatusStatisticsRequest {
39    type Response = SendStatusStatisticsResponse;
40    type Output = SendStatistics;
41    const ACTION: &'static str = "SendStatusStatistics";
42
43    fn parse_response(response_text: &str) -> SmsResult<Self::Response> {
44        serde_json::from_str(response_text).map_err(Into::into)
45    }
46
47    fn handle_response(response: Self::Response) -> SmsResult<Self::Output> {
48        match response.response {
49            ResponseBody::Success(success) => {
50                debug!("API 返回成功响应,request_id: {}", success.request_id);
51                info!("发送统计成功");
52                Ok(success.send_status_statistics)
53            }
54            ResponseBody::Error(api_error) => {
55                error!(
56                    "API 返回错误响应,request_id: {}, 错误码: {}",
57                    api_error.request_id, api_error.error.code
58                );
59                Err(crate::api::common::classify_error(
60                    &api_error.error.code,
61                    &api_error.error.message,
62                    api_error.request_id,
63                ))
64            }
65        }
66    }
67}