tencentcloud_sms/api/statistics/send_status_statistics/
request.rs1use 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}