tencentcloud_sms/api/other/report_conversion/
request.rs

1use super::response::{ReportConversionResponse, ReportConversionStatus, 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 ReportConversionRequest {
12    #[validate(length(min = 1, message = "SmsSdkAppId不能为空"))]
13    #[builder(setter(transform = |id: impl Into<String>| id.into()))]
14    sms_sdk_app_id: String,
15
16    #[validate(length(min = 1, message = "SerialNo不能为空"))]
17    #[builder(setter(transform = |sn: impl Into<String>| sn.into()))]
18    serial_no: String,
19
20    #[validate(range(min = 1, message = "ConversionTime必须大于0"))]
21    conversion_time: i64,
22}
23
24impl ApiRequest for ReportConversionRequest {
25    type Response = ReportConversionResponse;
26    type Output = ReportConversionStatus;
27    const ACTION: &'static str = "ReportConversion";
28
29    fn parse_response(response_text: &str) -> SmsResult<Self::Response> {
30        serde_json::from_str(response_text).map_err(Into::into)
31    }
32
33    fn handle_response(response: Self::Response) -> SmsResult<Self::Output> {
34        match response.response {
35            ResponseBody::Success(success) => {
36                debug!("API 返回成功响应,request_id: {}", success.request_id);
37                info!("转化率上报成功");
38                Ok(success.report_conversion_status)
39            }
40            ResponseBody::Error(api_error) => {
41                error!(
42                    "API 返回错误响应,request_id: {}, 错误码: {}",
43                    api_error.request_id, api_error.error.code
44                );
45                Err(crate::api::common::classify_error(
46                    &api_error.error.code,
47                    &api_error.error.message,
48                    api_error.request_id,
49                ))
50            }
51        }
52    }
53}