Skip to main content

u_sdk/translate/
trans.rs

1use super::Client;
2use super::Error;
3use super::types_rs::*;
4use crate::translate::utils::parse_json_response;
5use std::collections::HashMap;
6use u_sdk_common::helper::into_header_map;
7use u_sdk_common::open_api_sign::{SignParams, get_openapi_request_header};
8
9impl Client {
10    /// 机器翻译-通用版和专业版
11    ///
12    /// 注意事项:
13    /// 1. QPS限制50
14    /// 2. 字符长度有上限,且需要自己检查长度
15    pub fn translate(&self) -> TranslateBuilder<'_> {
16        Translate::builder(self)
17    }
18
19    /// > <a href="https://help.aliyun.com/zh/machine-translation/developer-reference/api-alimt-2018-10-12-translategeneral" target="_blank">api文档地址</a>
20    ///
21    /// 注意:使用翻译的不同的api,需要在控制台开启相应的服务
22    pub fn get_detect_language(&self) -> GetDetectLanguageBuilder<'_> {
23        GetDetectLanguage::builder(self)
24    }
25}
26
27impl Translate<'_> {
28    pub async fn send(&self) -> Result<TranslateResponse, Error> {
29        let client = self.client;
30        let creds = client.credentials_provider.load().await?;
31
32        let mut sign_params = SignParams {
33            req_method: "GET",
34            host: &client.host,
35            query_map: self,
36            x_acs_action: "TranslateGeneral",
37            x_acs_version: "2018-10-12",
38            x_acs_security_token: creds.sts_security_token.as_deref(),
39            request_body: None,
40            style: &client.style,
41        };
42        if self.scene != "general" {
43            sign_params.x_acs_action = "Translate";
44        }
45
46        let (common_headers, url_) =
47            get_openapi_request_header(&creds.access_key_secret, &creds.access_key_id, sign_params)
48                .map_err(|e| Error::Common(format!("get_common_headers error: {}", e)))?;
49
50        let header_map = into_header_map(common_headers);
51        let resp = client
52            .http_client
53            .get(url_)
54            .headers(header_map)
55            .send()
56            .await?;
57
58        let res = parse_json_response(resp).await?;
59        Ok(res)
60    }
61}
62
63impl GetDetectLanguage<'_> {
64    pub async fn send(&self) -> Result<String, Error> {
65        let client = self.client;
66        let creds = client.credentials_provider.load().await?;
67
68        let mut query_map = HashMap::new();
69        query_map.insert("SourceText".to_owned(), self.source_text.to_owned());
70
71        let sign_params = SignParams {
72            req_method: "GET",
73            host: &client.host,
74            query_map: &query_map,
75            x_acs_action: "GetDetectLanguage",
76            x_acs_version: "2018-10-12",
77            x_acs_security_token: creds.sts_security_token.as_deref(),
78            request_body: None,
79            style: &client.style,
80        };
81
82        let (common_headers, url_) =
83            get_openapi_request_header(&creds.access_key_secret, &creds.access_key_id, sign_params)
84                .map_err(|e| Error::Common(format!("get_common_headers error: {}", e)))?;
85
86        let header_map = into_header_map(common_headers);
87        let resp = client
88            .http_client
89            .get(url_)
90            .headers(header_map)
91            .send()
92            .await?;
93
94        let res = parse_json_response::<GetDetectLanguageResp>(resp).await?;
95        Ok(res.detected_language)
96    }
97}