tencentcloud_sms/api/statistics/callback_status_statistics/
request.rs

1use super::response::{CallbackStatistics, CallbackStatusStatisticsResponse, ResponseBody};
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 CallbackStatusStatisticsRequest {
12    #[validate(range(min = 1, message = "StartDateTime必须大于0"))]
13    start_date_time: u64,
14
15    #[validate(range(min = 1, message = "EndDataTime必须大于0"))]
16    end_data_time: u64,
17
18    #[validate(length(min = 1, message = "SmsSdkAppId不能为空"))]
19    #[builder(setter(transform = |id: impl Into<String>| id.into()))]
20    sms_sdk_app_id: String,
21
22    #[validate(range(min = 1, message = "Limit必须大于0"))]
23    limit: u32,
24
25    #[validate(range(min = 0, message = "Offset不能为负数"))]
26    #[builder(default = 0)]
27    offset: u32,
28}
29
30impl ApiRequest for CallbackStatusStatisticsRequest {
31    type Response = CallbackStatusStatisticsResponse;
32    type Output = CallbackStatistics;
33    const ACTION: &'static str = "CallbackStatusStatistics";
34
35    fn parse_response(response_text: &str) -> SmsResult<Self::Response> {
36        serde_json::from_str(response_text).map_err(Into::into)
37    }
38
39    fn handle_response(response: Self::Response) -> SmsResult<Self::Output> {
40        match response.response {
41            ResponseBody::Success(success) => {
42                debug!("API 返回成功响应,request_id: {}", success.request_id);
43                info!("回执统计成功");
44                Ok(success.callback_status_statistics)
45            }
46            ResponseBody::Error(api_error) => {
47                error!(
48                    "API 返回错误响应,request_id: {}, 错误码: {}",
49                    api_error.request_id, api_error.error.code
50                );
51                Err(crate::api::common::classify_error(
52                    &api_error.error.code,
53                    &api_error.error.message,
54                    api_error.request_id,
55                ))
56            }
57        }
58    }
59}