new struct for response
parent
00e2913b7a
commit
60d011a5db
30
src/lib.rs
30
src/lib.rs
|
@ -2,8 +2,9 @@ pub mod deepl_helper {
|
||||||
use clap::{load_yaml, App};
|
use clap::{load_yaml, App};
|
||||||
use directories::BaseDirs;
|
use directories::BaseDirs;
|
||||||
use dotenv;
|
use dotenv;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
use sprintf::sprintf;
|
use sprintf::sprintf;
|
||||||
use std::env::{self};
|
use std::{env::{self}};
|
||||||
|
|
||||||
pub struct Params {
|
pub struct Params {
|
||||||
source_lang: String,
|
source_lang: String,
|
||||||
|
@ -34,10 +35,7 @@ pub mod deepl_helper {
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
source_lang: matches.value_of("source").unwrap_or("DE").to_string(),
|
source_lang: matches.value_of("source").unwrap_or("DE").to_string(),
|
||||||
target_lang: matches
|
target_lang: matches.value_of("target").unwrap_or("EN-US").to_string(),
|
||||||
.value_of("target")
|
|
||||||
.unwrap_or("EN-US")
|
|
||||||
.to_string(),
|
|
||||||
file: matches.value_of("file").unwrap_or_default().to_string(),
|
file: matches.value_of("file").unwrap_or_default().to_string(),
|
||||||
key: env::var("key").unwrap(),
|
key: env::var("key").unwrap(),
|
||||||
uri: env::var("uri").unwrap(),
|
uri: env::var("uri").unwrap(),
|
||||||
|
@ -60,4 +58,26 @@ pub mod deepl_helper {
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Default)]
|
||||||
|
struct Translations {
|
||||||
|
detected_source_language: String,
|
||||||
|
text: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct DeeplResponse {
|
||||||
|
translations: Vec<Translations>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DeeplResponse {
|
||||||
|
pub fn get_text(&self) -> String {
|
||||||
|
let mut trans = "\n".to_string();
|
||||||
|
for translation in self.translations.iter() {
|
||||||
|
trans.push_str(&translation.text);
|
||||||
|
trans.push_str("\n");
|
||||||
|
}
|
||||||
|
trans
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
15
src/main.rs
15
src/main.rs
|
@ -1,9 +1,9 @@
|
||||||
use std::str::FromStr;
|
|
||||||
|
|
||||||
use deepl::deepl_helper::Params;
|
|
||||||
|
use deepl::deepl_helper::{DeeplResponse, Params};
|
||||||
use hyper::{Body, Client, Method, Request, body};
|
use hyper::{Body, Client, Method, Request, body};
|
||||||
use hyper_tls::HttpsConnector;
|
use hyper_tls::HttpsConnector;
|
||||||
use serde_json::Value;
|
|
||||||
|
|
||||||
#[tokio::main(flavor = "current_thread")]
|
#[tokio::main(flavor = "current_thread")]
|
||||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
@ -21,12 +21,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
let res = client.request(request).await?;
|
let res = client.request(request).await?;
|
||||||
let body_bytes = body::to_bytes(res.into_body()).await?;
|
let body_bytes = body::to_bytes(res.into_body()).await?;
|
||||||
let body = String::from_utf8(body_bytes.to_vec()).expect("response was not valid utf-8");
|
let body = String::from_utf8(body_bytes.to_vec()).expect("response was not valid utf-8");
|
||||||
let v: Value = serde_json::from_str(&body)?;
|
let v: DeeplResponse = serde_json::from_str(&body)?;
|
||||||
let result = String::from_str(match v["translations"][0]["text"].as_str() {
|
println!("{}", v.get_text());
|
||||||
Some(text) => text,
|
|
||||||
None => body.as_str()
|
|
||||||
}).unwrap();
|
|
||||||
|
|
||||||
println!("{}", result.replace("\"", ""));
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue