1 | use std::fmt::{self, Display}; |
2 | use serde::{Serialize, Deserialize}; |
3 | |
4 | |
5 | #[derive (Debug, Serialize, Deserialize, PartialEq, Clone, Copy)] |
6 | pub enum Language { |
7 | #[serde(rename="ar" )] |
8 | Arabic, |
9 | #[serde(rename="bn" )] |
10 | Bengali, |
11 | #[serde(rename="bg" )] |
12 | Bulgarian, |
13 | #[serde(rename="zh" )] |
14 | ChineseSimplified, |
15 | #[serde(rename="zh_tw" )] |
16 | ChineseTraditional, |
17 | #[serde(rename="cs" )] |
18 | Czech, |
19 | #[serde(rename="da" )] |
20 | Danish, |
21 | #[serde(rename="nl" )] |
22 | Dutch, |
23 | #[serde(rename="fi" )] |
24 | Finnish, |
25 | #[serde(rename="fr" )] |
26 | French, |
27 | #[serde(rename="de" )] |
28 | German, |
29 | #[serde(rename="el" )] |
30 | Greek, |
31 | #[serde(rename="hi" )] |
32 | Hindi, |
33 | #[serde(rename="hu" )] |
34 | Hungarian, |
35 | #[serde(rename="it" )] |
36 | Italian, |
37 | #[serde(rename="ja" )] |
38 | Japanese, |
39 | #[serde(rename="jv" )] |
40 | Javanese, |
41 | #[serde(rename="ko" )] |
42 | Korean, |
43 | #[serde(rename="zh_cmn" )] |
44 | Mandarin, |
45 | #[serde(rename="mr" )] |
46 | Marathi, |
47 | #[serde(rename="pl" )] |
48 | Polish, |
49 | #[serde(rename="pt" )] |
50 | Portuguese, |
51 | #[serde(rename="pa" )] |
52 | Punjabi, |
53 | #[serde(rename="ro" )] |
54 | Romanian, |
55 | #[serde(rename="ru" )] |
56 | Russian, |
57 | #[serde(rename="sr" )] |
58 | Serbian, |
59 | #[serde(rename="si" )] |
60 | Sinhalese, |
61 | #[serde(rename="sk" )] |
62 | Slovak, |
63 | #[serde(rename="es" )] |
64 | Spanish, |
65 | #[serde(rename="sv" )] |
66 | Swedish, |
67 | #[serde(rename="ta" )] |
68 | Tamil, |
69 | #[serde(rename="te" )] |
70 | Telugu, |
71 | #[serde(rename="tr" )] |
72 | Turkish, |
73 | #[serde(rename="uk" )] |
74 | Ukrainian, |
75 | #[serde(rename="ur" )] |
76 | Urdu, |
77 | #[serde(rename="vi" )] |
78 | Vietnamese, |
79 | #[serde(rename="zh_wuu" )] |
80 | WuShanghainese, |
81 | #[serde(rename="zh_hsn" )] |
82 | Xiang, |
83 | #[serde(rename="zh_yue" )] |
84 | YueCantonese, |
85 | #[serde(rename="zu" )] |
86 | Zulu |
87 | } |
88 | |
89 | impl Language { |
90 | pub fn new(lang: &str) -> Result<Self, serde_json::Error> { |
91 | serde_json::from_value(serde_json::json![lang]) |
92 | } |
93 | |
94 | pub fn content(&self) -> &str { |
95 | match self { |
96 | Language::Arabic => "ar" , |
97 | Language::Bengali => "bn" , |
98 | Language::Bulgarian => "bg" , |
99 | Language::ChineseSimplified => "zh" , |
100 | Language::ChineseTraditional => "zh_tw" , |
101 | Language::Czech => "cs" , |
102 | Language::Danish => "da" , |
103 | Language::Dutch => "nl" , |
104 | Language::Finnish => "fi" , |
105 | Language::French => "fr" , |
106 | Language::German => "de" , |
107 | Language::Greek => "el" , |
108 | Language::Hindi => "hi" , |
109 | Language::Hungarian => "hu" , |
110 | Language::Italian => "it" , |
111 | Language::Japanese => "ja" , |
112 | Language::Javanese => "jv" , |
113 | Language::Korean => "ko" , |
114 | Language::Mandarin => "zh_cmn" , |
115 | Language::Marathi => "mr" , |
116 | Language::Polish => "pl" , |
117 | Language::Portuguese => "pt" , |
118 | Language::Punjabi => "pa" , |
119 | Language::Romanian => "ro" , |
120 | Language::Russian => "ru" , |
121 | Language::Serbian => "sr" , |
122 | Language::Sinhalese => "si" , |
123 | Language::Slovak => "sk" , |
124 | Language::Spanish => "es" , |
125 | Language::Swedish => "sv" , |
126 | Language::Tamil => "ta" , |
127 | Language::Telugu => "te" , |
128 | Language::Turkish => "tr" , |
129 | Language::Ukrainian => "uk" , |
130 | Language::Urdu => "ur" , |
131 | Language::Vietnamese => "vi" , |
132 | Language::WuShanghainese => "zh_wuu" , |
133 | Language::Xiang => "zh_hsn" , |
134 | Language::YueCantonese => "zh_yue" , |
135 | Language::Zulu => "zu" |
136 | } |
137 | } |
138 | } |
139 | |
140 | impl Display for Language { |
141 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
142 | write!(f, " {}" , self.content()) |
143 | } |
144 | } |
145 | |