tencentcloud_sms/api/sign/modify_sms_sign/
request.rs

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