tencentcloud_sms/api/pull_sms_status/pull_sms_reply_status/
request.rs1use super::response::{PullSmsReply, PullSmsReplyStatusResponse, 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 PullSmsReplyStatusRequest {
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
21impl ApiRequest for PullSmsReplyStatusRequest {
22 type Response = PullSmsReplyStatusResponse;
23 type Output = Vec<PullSmsReply>;
24
25 const ACTION: &'static str = "PullSmsReplyStatus";
26
27 fn parse_response(response_text: &str) -> SmsResult<Self::Response> {
28 serde_json::from_str(response_text).map_err(Into::into)
29 }
30
31 fn handle_response(response: Self::Response) -> SmsResult<Self::Output> {
32 match response.response {
33 ResponseBody::Success(success) => {
34 debug!("API 返回成功响应,request_id: {}", success.request_id);
35 info!(
36 "拉取到 {} 条回复记录",
37 success.pull_sms_reply_status_set.len()
38 );
39 Ok(success.pull_sms_reply_status_set)
40 }
41 ResponseBody::Error(api_error) => {
42 error!(
43 "API 返回错误响应,request_id: {}, 错误码: {}",
44 api_error.request_id, api_error.error.code
45 );
46 Err(crate::api::common::classify_error(
47 &api_error.error.code,
48 &api_error.error.message,
49 api_error.request_id,
50 ))
51 }
52 }
53 }
54}