tencentcloud_sms/api/template/add_sms_template/
request.rs1use super::response::{AddSmsTemplateResponse, AddTemplateStatus, 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 AddSmsTemplateRequest {
12 #[validate(length(min = 1, max = 30, message = "模板名称必须在1-30字符之间"))]
13 #[builder(setter(transform = |name: impl Into<String>| name.into()))]
14 template_name: String,
15
16 #[validate(length(min = 1, message = "模板内容不能为空"))]
17 #[builder(setter(transform = |content: impl Into<String>| content.into()))]
18 template_content: String,
19
20 #[validate(range(max = 1, message = "短信类型必须为0或1"))]
21 sms_type: u8,
22
23 #[validate(range(max = 1, message = "国际类型必须为0或1"))]
24 international: u8,
25
26 #[validate(length(min = 1, max = 100, message = "备注必须在1-100字符之间"))]
27 #[builder(setter(transform = |r: impl Into<String>| r.into()))]
28 remark: String,
29}
30
31impl ApiRequest for AddSmsTemplateRequest {
32 type Response = AddSmsTemplateResponse;
33 type Output = AddTemplateStatus;
34
35 const ACTION: &'static str = "AddSmsTemplate";
36
37 fn parse_response(response_text: &str) -> SmsResult<Self::Response> {
38 serde_json::from_str(response_text).map_err(Into::into)
39 }
40
41 fn handle_response(response: Self::Response) -> SmsResult<Self::Output> {
42 match response.response {
43 ResponseBody::Success(success) => {
44 debug!("API 返回成功响应,request_id: {}", success.request_id);
45 info!(
46 "模板添加成功,模板ID: {}",
47 success.add_template_status.template_id
48 );
49 Ok(success.add_template_status)
50 }
51 ResponseBody::Error(api_error) => {
52 error!(
53 "API 返回错误响应,request_id: {}, 错误码: {}",
54 api_error.request_id, api_error.error.code
55 );
56 Err(crate::api::common::classify_error(
57 &api_error.error.code,
58 &api_error.error.message,
59 api_error.request_id,
60 ))
61 }
62 }
63 }
64}