1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
use super::api::Lang;
use super::api::PapagoReq;
use super::api::{NMT_URL, SMT_URL};
use clap::{App, Arg};
const LANG_PAPAGO: [&str; 9] = ["ko", "en", "cn", "tw", "es", "fr", "vi", "th", "id"];
pub struct CLIArgs {
pub payload: PapagoReq,
pub api: &'static str,
}
pub fn get_args() -> CLIArgs {
let matches = App::new("Papago API")
.arg(
Arg::with_name("TEXT")
.help("Text to translate")
.required(true)
.index(1),
)
.arg(
Arg::with_name("source")
.short("s")
.long("source")
.takes_value(true)
.default_value("en")
.possible_values(&LANG_PAPAGO)
.help("Source language"),
)
.arg(
Arg::with_name("target")
.short("t")
.long("target")
.takes_value(true)
.default_value("ko")
.possible_values(&LANG_PAPAGO)
.help("Target language"),
)
.arg(
Arg::with_name("nmt")
.long("nmt")
.help("USE NMT API (default)")
.conflicts_with("smt"),
)
.arg(
Arg::with_name("smt")
.long("smt")
.help("USE SMT API")
.conflicts_with("nmt"),
)
.get_matches();
let payload = PapagoReq {
source: parse_lang(matches.value_of("source").unwrap()),
target: parse_lang(matches.value_of("target").unwrap()),
text: matches.value_of("TEXT").unwrap().to_owned(),
};
let api = if matches.is_present("smt") {
SMT_URL
} else {
NMT_URL
};
CLIArgs { payload, api }
}
fn parse_lang(possible_lang: &str) -> Lang {
match possible_lang.to_lowercase().as_str() {
"ko" => Lang::Ko,
"en" => Lang::En,
"cn" => Lang::Cn,
"tw" => Lang::Tw,
"es" => Lang::Es,
"fr" => Lang::Fr,
"vi" => Lang::Vi,
"th" => Lang::Th,
"id" => Lang::Id,
_ => panic!("WRONG INPUT BUT YOU SHOULD NEVER SEE THIS"),
}
}