deepl/src/engine/params.rs

62 lines
1.7 KiB
Rust

use clap::{load_yaml, App, ArgMatches};
use directories::BaseDirs;
use dotenv;
use sprintf::sprintf;
use std::{env, path::PathBuf};
pub struct Params {
pub source_lang: String,
pub target_lang: String,
key: String,
uri: String,
text: String,
}
impl Params {
pub fn new() -> Result<Self, String> {
let base_dir: BaseDirs = BaseDirs::new().unwrap();
let my_path: PathBuf = base_dir.config_dir().join("deepl/.env");
match dotenv::from_path(my_path.as_path()) {
Ok(env) => env,
Err(_) => {
return Err(format!(
"Could not load .env file {:?}",
base_dir.config_dir().join("deepl/.env").as_path()
));
}
};
let yaml = load_yaml!("./../../cli.yml");
let matches: ArgMatches = App::from_yaml(yaml).get_matches();
Ok(Self {
source_lang: matches.value_of("source").unwrap_or("0").to_string(),
target_lang: matches.value_of("target").unwrap_or("EN-US").to_string(),
key: env::var("KEY").unwrap(),
uri: env::var("URI").unwrap(),
text: matches.value_of("INPUT").unwrap().to_string(),
})
}
pub fn url(&self) -> String {
sprintf!("%s?auth_key=%s", self.uri, self.key).unwrap()
}
pub fn body(&self) -> String {
let mut body = sprintf!(
"auth_key=%s&text=%s&target_lang=%s",
self.key,
self.text,
self.target_lang
)
.unwrap();
if self.source_lang != "0" {
let add = sprintf!("&source_lang=%s", self.source_lang).unwrap();
body.push_str(&add);
}
body
}
}