tencentcloud_sms/api/sign/add_sms_sign/
request.rs

1use super::response::{AddSignStatus, AddSmsSignResponse, 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 AddSmsSignRequest {
12    #[validate(length(min = 2, max = 12, message = "签名名称必须在2-12字符之间"))]
13    #[builder(setter(transform = |name: impl Into<String>| name.into()))]
14    sign_name: String,
15
16    #[validate(range(max = 6, message = "签名类型必须在0-6之间"))]
17    sign_type: u8,
18
19    #[validate(range(max = 15, message = "证明类型必须在0-15之间"))]
20    document_type: u8,
21
22    #[validate(range(max = 1, message = "国际类型必须为0或1"))]
23    international: u8,
24
25    #[validate(range(max = 1, message = "签名用途必须为0或1"))]
26    sign_purpose: u8,
27
28    #[validate(length(min = 1, message = "证明图片不能为空"))]
29    #[builder(setter(transform = |img: impl Into<String>| img.into()))]
30    proof_image: String,
31
32    #[serde(skip_serializing_if = "Option::is_none")]
33    #[builder(default, setter(transform = |img: impl Into<String>| Some(img.into())))]
34    commission_image: Option<String>,
35
36    #[serde(skip_serializing_if = "Option::is_none")]
37    #[builder(default, setter(transform = |r: impl Into<String>| Some(r.into())))]
38    remark: Option<String>,
39}
40
41impl ApiRequest for AddSmsSignRequest {
42    type Response = AddSmsSignResponse;
43    type Output = AddSignStatus;
44
45    const ACTION: &'static str = "AddSmsSign";
46
47    fn parse_response(response_text: &str) -> SmsResult<Self::Response> {
48        serde_json::from_str(response_text).map_err(Into::into)
49    }
50
51    fn handle_response(response: Self::Response) -> SmsResult<Self::Output> {
52        match response.response {
53            ResponseBody::Success(success) => {
54                debug!("API 返回成功响应,request_id: {}", success.request_id);
55                info!("签名添加成功,签名ID: {}", success.add_sign_status.sign_id);
56                Ok(success.add_sign_status)
57            }
58            ResponseBody::Error(api_error) => {
59                error!(
60                    "API 返回错误响应,request_id: {}, 错误码: {}",
61                    api_error.request_id, api_error.error.code
62                );
63                Err(crate::api::common::classify_error(
64                    &api_error.error.code,
65                    &api_error.error.message,
66                    api_error.request_id,
67                ))
68            }
69        }
70    }
71}