deepl_openapi/apis/
translate_text_api.rs

1/*
2 * DeepL API Documentation
3 *
4 * The DeepL API provides programmatic access to DeepL’s machine translation technology.
5 *
6 * The version of the OpenAPI document: 2.7.0
7 * 
8 * Generated by: https://openapi-generator.tech
9 */
10
11
12use reqwest;
13
14use crate::apis::ResponseContent;
15use super::{Error, configuration};
16
17
18/// struct for typed errors of method [`translate_text`]
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum TranslateTextError {
22    Status400(),
23    Status403(),
24    Status404(),
25    Status413(),
26    Status414(),
27    Status429(),
28    Status456(),
29    Status500(),
30    Status504(),
31    Status529(),
32    UnknownValue(serde_json::Value),
33}
34
35
36/// The translate function.   The total request body size must not exceed 128 KiB (128 · 1024 bytes). Please split up your text into multiple calls if it exceeds this limit.
37pub async fn translate_text(configuration: &configuration::Configuration, text: Vec<String>, target_lang: crate::models::TargetLanguage, source_lang: Option<crate::models::SourceLanguage>, split_sentences: Option<&str>, preserve_formatting: Option<&str>, formality: Option<crate::models::Formality>, glossary_id: Option<&str>, tag_handling: Option<&str>, non_splitting_tags: Option<&str>, outline_detection: Option<&str>, splitting_tags: Option<&str>, ignore_tags: Option<&str>) -> Result<crate::models::TranslateText200Response, Error<TranslateTextError>> {
38    let local_var_configuration = configuration;
39
40    let local_var_client = &local_var_configuration.client;
41
42    let local_var_uri_str = format!("{}/translate", local_var_configuration.base_path);
43    let mut local_var_req_builder = local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
44
45    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
46        local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
47    }
48    if let Some(ref local_var_apikey) = local_var_configuration.api_key {
49        let local_var_key = local_var_apikey.key.clone();
50        let local_var_value = match local_var_apikey.prefix {
51            Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key),
52            None => local_var_key,
53        };
54        local_var_req_builder = local_var_req_builder.header("Authorization", local_var_value);
55    };
56    let mut local_var_form_params = std::collections::HashMap::new();
57    local_var_form_params.insert("text", text.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(",").to_string());
58    if let Some(local_var_param_value) = source_lang {
59        local_var_form_params.insert("source_lang", local_var_param_value.to_string());
60    }
61    local_var_form_params.insert("target_lang", target_lang.to_string());
62    if let Some(local_var_param_value) = split_sentences {
63        local_var_form_params.insert("split_sentences", local_var_param_value.to_string());
64    }
65    if let Some(local_var_param_value) = preserve_formatting {
66        local_var_form_params.insert("preserve_formatting", local_var_param_value.to_string());
67    }
68    if let Some(local_var_param_value) = formality {
69        local_var_form_params.insert("formality", local_var_param_value.to_string());
70    }
71    if let Some(local_var_param_value) = glossary_id {
72        local_var_form_params.insert("glossary_id", local_var_param_value.to_string());
73    }
74    if let Some(local_var_param_value) = tag_handling {
75        local_var_form_params.insert("tag_handling", local_var_param_value.to_string());
76    }
77    if let Some(local_var_param_value) = non_splitting_tags {
78        local_var_form_params.insert("non_splitting_tags", local_var_param_value.to_string());
79    }
80    if let Some(local_var_param_value) = outline_detection {
81        local_var_form_params.insert("outline_detection", local_var_param_value.to_string());
82    }
83    if let Some(local_var_param_value) = splitting_tags {
84        local_var_form_params.insert("splitting_tags", local_var_param_value.to_string());
85    }
86    if let Some(local_var_param_value) = ignore_tags {
87        local_var_form_params.insert("ignore_tags", local_var_param_value.to_string());
88    }
89    local_var_req_builder = local_var_req_builder.form(&local_var_form_params);
90
91    let local_var_req = local_var_req_builder.build()?;
92    let local_var_resp = local_var_client.execute(local_var_req).await?;
93
94    let local_var_status = local_var_resp.status();
95    let local_var_content = local_var_resp.text().await?;
96
97    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
98        serde_json::from_str(&local_var_content).map_err(Error::from)
99    } else {
100        let local_var_entity: Option<TranslateTextError> = serde_json::from_str(&local_var_content).ok();
101        let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity };
102        Err(Error::ResponseError(local_var_error))
103    }
104}
105