deepl_pro/
lang.rs

1use crate::Error;
2use serde::{Deserialize, Serialize};
3use std::{fmt, str::FromStr};
4
5/// Languages supported by the DeepL API.
6#[derive(Debug, Copy, Clone, Serialize, Deserialize, Ord, PartialOrd, Eq, PartialEq, Hash)]
7#[serde(rename_all = "SCREAMING-KEBAB-CASE")]
8pub enum Lang {
9    /// Arabic.
10    Ar,
11    /// Bulgarian.
12    Bg,
13    /// Czech.
14    Cs,
15    /// Danish.
16    Da,
17    /// German.
18    De,
19    /// Greek.
20    El,
21    /// English.
22    En,
23    /// English (British)
24    EnGb,
25    /// English (American)
26    EnUs,
27    /// Spanish
28    Es,
29    /// Estonian
30    Et,
31    /// Finnish
32    Fi,
33    /// French.
34    Fr,
35    /// Hungarian.
36    Hu,
37    /// Indonesian.
38    Id,
39    /// Italian.
40    It,
41    /// Japanese.
42    Ja,
43    /// Korean.
44    Ko,
45    /// Lithuanian.
46    Lt,
47    /// Latvian.
48    Lv,
49    /// Norwegian.
50    Nb,
51    /// Dutch.
52    Nl,
53    /// Polish.
54    Pl,
55    /// Portuguese (all varieties mixed).
56    Pt,
57    /// Portuguese (Brazilian).
58    PtBr,
59    /// Portuguese (all Portuguese varieties excluding Brazilian Portuguese).
60    PtPt,
61    /// Romanian.
62    Ro,
63    /// Russian.
64    Ru,
65    /// Slovak.
66    Sk,
67    /// Slovenian.
68    Sl,
69    /// Swedish.
70    Sv,
71    /// Turkish.
72    Tr,
73    /// Ukrainian.
74    Uk,
75    /// Chinese.
76    Zh,
77}
78
79impl fmt::Display for Lang {
80    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
81        write!(
82            f,
83            "{}",
84            match self {
85                Self::Ar => "AR",
86                Self::Bg => "BG",
87                Self::Cs => "CS",
88                Self::Da => "DA",
89                Self::De => "DE",
90                Self::El => "EL",
91                Self::En => "EN",
92                Self::EnGb => "EN-GB",
93                Self::EnUs => "EN-US",
94                Self::Es => "ES",
95                Self::Et => "ET",
96                Self::Fi => "FI",
97                Self::Fr => "FR",
98                Self::Hu => "HU",
99                Self::Id => "ID",
100                Self::It => "IT",
101                Self::Ja => "JA",
102                Self::Ko => "KO",
103                Self::Lt => "LT",
104                Self::Lv => "LV",
105                Self::Nb => "NB",
106                Self::Nl => "NL",
107                Self::Pl => "PL",
108                Self::Pt => "PT",
109                Self::PtBr => "PT-BR",
110                Self::PtPt => "PT-PT",
111                Self::Ro => "RO",
112                Self::Ru => "RU",
113                Self::Sk => "SK",
114                Self::Sl => "SL",
115                Self::Sv => "SV",
116                Self::Tr => "TR",
117                Self::Uk => "UK",
118                Self::Zh => "ZH",
119            }
120        )
121    }
122}
123
124impl FromStr for Lang {
125    type Err = Error;
126
127    fn from_str(s: &str) -> Result<Self, Self::Err> {
128        Ok(match s {
129            "AR" | "ar" => Self::Ar,
130            "BG" | "bg" => Self::Bg,
131            "CS" | "cs" => Self::Cs,
132            "DA" | "da" => Self::Da,
133            "DE" | "de" => Self::De,
134            "EL" | "el" => Self::El,
135            "EN" | "en" => Self::En,
136            "EN-GB" | "en-gb" => Self::EnGb,
137            "EN-US" | "en-us" => Self::EnUs,
138            "ES" | "es" => Self::Es,
139            "ET" | "et" => Self::Et,
140            "FI" | "fi" => Self::Fi,
141            "FR" | "fr" => Self::Fr,
142            "HU" | "hu" => Self::Hu,
143            "ID" | "id" => Self::Id,
144            "IT" | "it" => Self::It,
145            "JA" | "ja" => Self::Ja,
146            "KO" | "ko" => Self::Ko,
147            "LT" | "lt" => Self::Lt,
148            "LV" | "lv" => Self::Lv,
149            "NB" | "nb" => Self::Nb,
150            "NL" | "nl" => Self::Nl,
151            "PL" | "pl" => Self::Pl,
152            "PT" | "pt" => Self::Pt,
153            "PT-BR" | "pt-br" => Self::PtBr,
154            "PT-PT" | "pt-pt" => Self::PtPt,
155            "RO" | "ro" => Self::Ro,
156            "RU" | "ru" => Self::Ru,
157            "SK" | "sk" => Self::Sk,
158            "SL" | "sl" => Self::Sl,
159            "SV" | "sv" => Self::Sv,
160            "TR" | "tr" => Self::Tr,
161            "UK" | "uk" => Self::Uk,
162            "ZH" | "zh" => Self::Zh,
163            _ => {
164                return Err(Error::InvalidLang(s.to_string()));
165            }
166        })
167    }
168}