tencentcloud_sms/api/sign/add_sms_sign/
request.rs1use 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}