deepl_api_client/
lib.rs

1use std::time::Duration;
2
3use serde::{Deserialize, Serialize};
4
5pub use lang::Lang;
6use ureq::Agent;
7mod lang;
8
9#[derive(Serialize, Debug)]
10struct Req {
11    text: String,
12    source_lang: Lang,
13    target_lang: Lang,
14}
15
16impl Req {
17    pub fn new(text: String, source_lang: Lang, target_lang: Lang) -> Self {
18        Req {
19            text,
20            source_lang,
21            target_lang,
22        }
23    }
24}
25
26#[derive(Deserialize, Debug)]
27struct Resp {
28    code: i32,
29    data: String,
30}
31
32pub fn translate(
33    api: &str,
34    text: String,
35    target_lang: Lang,
36    source_lang: Lang,
37) -> Result<String, Box<dyn std::error::Error>> {
38    let target_lang = if target_lang == Lang::Auto {
39        Lang::ZH
40    } else {
41        target_lang
42    };
43    let req = Req::new(text, source_lang, target_lang);
44
45    let agent: Agent = ureq::AgentBuilder::new()
46        .timeout_read(Duration::from_secs(10))
47        .timeout_write(Duration::from_secs(10))
48        .build();
49    let resp: Resp = agent.post(api).send_json(&req)?.into_json()?;
50
51    if resp.code == 200 {
52        return Ok(resp.data);
53    }
54
55    Ok("翻译接口失效,请更换接口或者自己搭建 https://github.com/zu1k/deepl-api-rs".into())
56}