tencentcloud_sms/api/other/describe_phone_number_info/
request.rs

1use super::response::{DescribePhoneNumberInfoResponse, PhoneNumberInfo, 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 DescribePhoneNumberInfoRequest {
12    #[validate(length(min = 1, max = 200, message = "手机号数量必须在1-200之间"))]
13    #[builder(setter(transform = |phones: Vec<impl Into<String>>| phones.into_iter().map(Into::into).collect()))]
14    phone_number_set: Vec<String>,
15}
16
17impl ApiRequest for DescribePhoneNumberInfoRequest {
18    type Response = DescribePhoneNumberInfoResponse;
19    type Output = Vec<PhoneNumberInfo>;
20    const ACTION: &'static str = "DescribePhoneNumberInfo";
21
22    fn parse_response(response_text: &str) -> SmsResult<Self::Response> {
23        serde_json::from_str(response_text).map_err(Into::into)
24    }
25
26    fn handle_response(response: Self::Response) -> SmsResult<Self::Output> {
27        match response.response {
28            ResponseBody::Success(success) => {
29                debug!("API 返回成功响应,request_id: {}", success.request_id);
30                info!("查询到 {} 个号码信息", success.phone_number_info_set.len());
31                Ok(success.phone_number_info_set)
32            }
33            ResponseBody::Error(api_error) => {
34                error!(
35                    "API 返回错误响应,request_id: {}, 错误码: {}",
36                    api_error.request_id, api_error.error.code
37                );
38                Err(crate::api::common::classify_error(
39                    &api_error.error.code,
40                    &api_error.error.message,
41                    api_error.request_id,
42                ))
43            }
44        }
45    }
46}