diff --git a/Cargo.lock b/Cargo.lock index d9a7061..98bb02b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -152,7 +152,7 @@ checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" [[package]] name = "deepl" -version = "1.0.2" +version = "1.0.3" dependencies = [ "anyhow", "clap", diff --git a/Cargo.toml b/Cargo.toml index 283a868..3cd8742 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "deepl" -version = "1.0.2" +version = "1.0.3" edition = "2024" license = "MIT OR Apache-2.0" authors = ["Mathias Rothenhäusler +Required keys URI (eg. https://api-free.deepl.com/v2/translate) and KEY (eg. XYZ:rg). -USAGE:
- deepl [OPTIONS] \
+### USAGE: + deepl [OPTIONS] \ -FLAGS:
- -h, --help Prints help information
- -V, --version Prints version information
+### FLAGS: + -h, --help Prints help information + -V, --version Prints version information -OPTIONS:
- -s, --source The language you want to translate. Default is autodectect.
- -t, --target The language your text should be tranlated to. Default is DE.
+### OPTIONS: + -s, --source The language you want to translate. Default is autodectect. + -t, --target The language your text should be tranlated to. Default is DE. -ARGS:
- \ Text to translate
+### ARGS: + \ Text to translate diff --git a/src/engine/params.rs b/src/engine/params.rs index 98a001b..0359311 100644 --- a/src/engine/params.rs +++ b/src/engine/params.rs @@ -27,9 +27,9 @@ pub struct Cli { pub struct Params { pub source_lang: String, pub target_lang: String, - key: String, + pub key: String, uri: String, - text: String, + pub input: String, } impl Params { @@ -47,14 +47,14 @@ impl Params { Ok(Self { source_lang: cli.source, target_lang: cli.target, - text: cli.input, + input: cli.input, key: env::var("KEY").context("KEY env var missing")?, uri: env::var("URI").context("URI env var missing")?, }) } pub fn url(&self) -> Result { - let url = sprintf!("%s?auth_key=%s", self.uri, self.key) + let url = sprintf!("%s", self.uri) .map_err(|e| anyhow!("could not create request body: {e:?}"))?; Ok(url) @@ -62,9 +62,8 @@ impl Params { pub fn body(&self) -> Result { let mut body = sprintf!( - "auth_key=%s&text=%s&target_lang=%s", - self.key, - self.text, + "text=%s&target_lang=%s", + self.input, self.target_lang ) .map_err(|e| anyhow!("could not create request body: {e:?}"))?; diff --git a/src/engine/response.rs b/src/engine/response.rs index 29a69b4..da3426b 100644 --- a/src/engine/response.rs +++ b/src/engine/response.rs @@ -1,5 +1,8 @@ use serde::{Deserialize, Serialize}; +use crate::engine::params::Params; +use anyhow::Result; + #[derive(Serialize, Deserialize, Default)] struct Translations { detected_source_language: String, @@ -12,18 +15,28 @@ pub struct DeeplResponse { } impl DeeplResponse { - pub fn get_text(&self, target_language: &str) -> String { - let mut trans: String = String::new(); - for translation in self.translations.iter() { - trans.push_str(&format!( - "--- Detected Source Language {} -------------------------\n", - translation.detected_source_language + pub fn get_text(&self, params: &Params) -> Result { + + let max_src = self + .translations + .iter() + .map(|t| t.text.len()) + .max() + .unwrap_or(0); + + let mut out = String::new(); + + for t in &self.translations { + out.push_str(&format!( + "{src} >>> {:>> {}\n", + params.input, + t.text, + src = t.detected_source_language, + tgt = params.target_lang, + width = max_src, )); - trans.push_str(&format!("{}: {}", target_language, translation.text)); - trans.push('\n'); - trans.push_str(&"-".repeat(57)); - trans.push('\n'); } - trans + + Ok(out) } } diff --git a/src/main.rs b/src/main.rs index 6191d54..34107f3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,6 +16,7 @@ async fn main() -> Result<()> { let request = Request::builder() .method(Method::POST) .uri(params.url()?) + .header("Authorization", format!("DeepL-Auth-Key {}", params.key)) .header("content-type", "application/x-www-form-urlencoded") .body(Body::from(params.body()?))?; @@ -24,6 +25,6 @@ async fn main() -> Result<()> { let body = String::from_utf8(body_bytes.to_vec())?; let v: DeeplResponse = serde_json::from_str(&body).context(format!("Could not parse body: {}", body))?; - println!("{}", v.get_text(¶ms.target_lang)); + println!("{}", v.get_text(¶ms)?); Ok(()) }