iso639_1/lib.rs
1//! # iso639-1
2//!
3//! [](https://travis-ci.org/AlbanMinassian/iso639)
4//! [](https://codecov.io/gh/AlbanMinassian/iso639)
5//! [](https://opensource.org/licenses/MIT)
6//! [](https://crates.io/crates/iso639-1)
7//!
8//! iso639 v1 enum and utils (for Rust)
9//!
10//! ## Iso 639-1 ##
11//!
12//! ISO 639-1:2002, Codes for the representation of names of languages — Part 1: Alpha-2 code, is the first part of the ISO 639 series of international standards for language codes. Part 1 covers the registration of two-letter codes. There are 184 two-letter codes registered as of October 2015.
13//! The registered codes cover the world's major languages. (source [https://en.wikipedia.org/wiki/ISO_639-1](https://en.wikipedia.org/wiki/ISO_639-1))
14//!
15//! ## Features
16//!
17//! Optional features:
18//!
19//! - [`serde`][]: Enable serialization/deserialization via serde.
20//! - [`strum`][]: Derive [EnumIter](https://docs.rs/strum_macros/0.24.0/strum_macros/derive.EnumIter.html) on Iso639_1.
21//!
22//! ## Example
23//!
24//! ```rust
25//! extern crate iso639_1;
26//! use iso639_1::{Iso639_1, to_iso639_3};
27//! use std::convert::TryFrom;
28//!
29//! pub fn main() {
30//! assert!(Iso639_1::Fr != Iso639_1::En);
31//! assert!(Iso639_1::try_from("fr").unwrap() == Iso639_1::Fr);
32//! assert!(to_iso639_3("fr").unwrap() == "fra");
33//! }
34//! ```
35//!
36//! ## Links
37//!
38//! github: [https://github.com/AlbanMinassian/iso639](https://github.com/AlbanMinassian/iso639)
39//!
40//! ## license
41//!
42//! MIT
43
44#[cfg(feature = "serde")]
45extern crate serde;
46
47#[cfg(feature = "strum")]
48extern crate strum_macros;
49
50#[cfg(feature = "serde")]
51mod serde_impl;
52
53extern crate core;
54extern crate failure;
55
56use core::fmt::Display;
57use failure::{Backtrace, Context, Fail};
58use std::{convert::TryFrom, fmt};
59
60// ------------------------------------------------------------------------------------
61// Error
62// ------------------------------------------------------------------------------------
63#[derive(Debug)]
64pub struct Iso639v1Error {
65 pub inner: Context<Iso639v1ErrorKind>,
66}
67
68#[derive(Fail, Debug, Clone, Eq, PartialEq)]
69pub enum Iso639v1ErrorKind {
70 NotFoundFrom(String),
71 NotFoundTo(String),
72}
73
74impl fmt::Display for Iso639v1ErrorKind {
75 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
76 match *self {
77 Iso639v1ErrorKind::NotFoundFrom(ref param) => write!(f, "not found {}", param),
78 Iso639v1ErrorKind::NotFoundTo(ref param) => write!(f, "not found {}", param),
79 }
80 }
81}
82
83#[cfg_attr(tarpaulin, skip)]
84impl Fail for Iso639v1Error {
85 fn cause(&self) -> Option<&dyn Fail> {
86 self.inner.cause()
87 }
88 fn backtrace(&self) -> Option<&Backtrace> {
89 self.inner.backtrace()
90 }
91}
92
93impl Display for Iso639v1Error {
94 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
95 Display::fmt(&self.inner, f)
96 }
97}
98
99impl Iso639v1Error {
100 pub fn kind(&self) -> &Iso639v1ErrorKind {
101 &*self.inner.get_context()
102 }
103}
104
105impl From<Iso639v1ErrorKind> for Iso639v1Error {
106 fn from(kind: Iso639v1ErrorKind) -> Iso639v1Error {
107 Iso639v1Error {
108 inner: Context::new(kind),
109 }
110 }
111}
112
113// ------------------------------------------------------------------------------------
114// Iso639_1 (enum)
115// ------------------------------------------------------------------------------------
116/// iso639-1 enum
117///
118/// # Examples
119/// ```rust
120/// extern crate iso639_1;
121/// use iso639_1::Iso639_1;
122/// fn main() {
123/// println!("{:?}", Iso639_1::En);
124/// assert!(Iso639_1::Fr != Iso639_1::En);
125/// }
126/// ```
127#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
128#[cfg_attr(feature = "strum", derive(strum_macros::EnumIter))]
129pub enum Iso639_1 {
130 /// 639-2: aar, name: Afar (Afaraf)
131 Aa,
132 /// 639-2: abk, name: Abkhaz (аҧсуа бызшәа, аҧсшәа)
133 Ab,
134 /// 639-2: ave, name: Avestan (avesta)
135 Ae,
136 /// 639-2: afr, name: Afrikaans
137 Af,
138 /// 639-2: aka, name: Akan
139 Ak,
140 /// 639-2: amh, name: Amharic (አማርኛ)
141 Am,
142 /// 639-2: arg, name: Aragonese (aragonés)
143 An,
144 /// 639-2: ara, name: Arabic (العربية)
145 Ar,
146 /// 639-2: asm, name: Assamese (অসমীয়া)
147 As,
148 /// 639-2: ava, name: Avaric (авар мацӀ, магӀарул мацӀ)
149 Av,
150 /// 639-2: aym, name: Aymara (aymar aru)
151 Ay,
152 /// 639-2: aze, name: Azerbaijani (azərbaycan dili)
153 Az,
154 /// 639-2: bak, name: Bashkir (башҡорт теле)
155 Ba,
156 /// 639-2: bel, name: Belarusian (беларуская мова)
157 Be,
158 /// 639-2: bul, name: Bulgarian (български език)
159 Bg,
160 /// 639-2: bih, name: Bihari (भोजपुरी)
161 Bh,
162 /// 639-2: bis, name: Bislama
163 Bi,
164 /// 639-2: bam, name: Bambara (bamanankan)
165 Bm,
166 /// 639-2: ben, name: Bengali, Bangla (বাংলা)
167 Bn,
168 /// 639-2: bod, name: Tibetan Standard, Tibetan, Central (བོད་ཡིག)
169 Bo,
170 /// 639-2: bre, name: Breton (brezhoneg)
171 Br,
172 /// 639-2: bos, name: Bosnian (bosanski jezik)
173 Bs,
174 /// 639-2: cat, name: Catalan (català)
175 Ca,
176 /// 639-2: che, name: Chechen (нохчийн мотт)
177 Ce,
178 /// 639-2: cha, name: Chamorro (Chamoru)
179 Ch,
180 /// 639-2: cos, name: Corsican (corsu, lingua corsa)
181 Co,
182 /// 639-2: cre, name: Cree (ᓀᐦᐃᔭᐍᐏᐣ)
183 Cr,
184 /// 639-2: ces, name: Czech (čeština, český jazyk)
185 Cs,
186 /// 639-2: chu, name: Old Church Slavonic, Church Slavonic, Old Bulgarian (ѩзыкъ словѣньскъ)
187 Cu,
188 /// 639-2: chv, name: Chuvash (чӑваш чӗлхи)
189 Cv,
190 /// 639-2: cym, name: Welsh (Cymraeg)
191 Cy,
192 /// 639-2: dan, name: Danish (dansk)
193 Da,
194 /// 639-2: deu, name: German (Deutsch)
195 De,
196 /// 639-2: div, name: Divehi, Dhivehi, Maldivian (ދިވެހި)
197 Dv,
198 /// 639-2: dzo, name: Dzongkha (རྫོང་ཁ)
199 Dz,
200 /// 639-2: ewe, name: Ewe (Eʋegbe)
201 Ee,
202 /// 639-2: ell, name: Greek (modern) (ελληνικά)
203 El,
204 /// 639-2: eng, name: English
205 En,
206 /// 639-2: epo, name: Esperanto
207 Eo,
208 /// 639-2: spa, name: Spanish (Español)
209 Es,
210 /// 639-2: est, name: Estonian (eesti, eesti keel)
211 Et,
212 /// 639-2: eus, name: Basque (euskara, euskera)
213 Eu,
214 /// 639-2: fas, name: Persian (Farsi) (فارسی)
215 Fa,
216 /// 639-2: ful, name: Fula, Fulah, Pulaar, Pular (Fulfulde, Pulaar, Pular)
217 Ff,
218 /// 639-2: fin, name: Finnish (suomi, suomen kieli)
219 Fi,
220 /// 639-2: fij, name: Fijian (vosa Vakaviti)
221 Fj,
222 /// 639-2: fao, name: Faroese (føroyskt)
223 Fo,
224 /// 639-2: fra, name: French (français, langue française)
225 Fr,
226 /// 639-2: fry, name: Western Frisian (Frysk)
227 Fy,
228 /// 639-2: gle, name: Irish (Gaeilge)
229 Ga,
230 /// 639-2: gla, name: Scottish Gaelic, Gaelic (Gàidhlig)
231 Gd,
232 /// 639-2: glg, name: Galician (galego)
233 Gl,
234 /// 639-2: grn, name: Guaraní (Avañe'ẽ)
235 Gn,
236 /// 639-2: guj, name: Gujarati (ગુજરાતી)
237 Gu,
238 /// 639-2: glv, name: Manx (Gaelg, Gailck)
239 Gv,
240 /// 639-2: hau, name: Hausa ((Hausa) هَوُسَ)
241 Ha,
242 /// 639-2: heb, name: Hebrew (modern) (עברית)
243 He,
244 /// 639-2: hin, name: Hindi (हिन्दी, हिंदी)
245 Hi,
246 /// 639-2: hmo, name: Hiri Motu
247 Ho,
248 /// 639-2: hrv, name: Croatian (hrvatski jezik)
249 Hr,
250 /// 639-2: hat, name: Haitian, Haitian Creole (Kreyòl ayisyen)
251 Ht,
252 /// 639-2: hun, name: Hungarian (magyar)
253 Hu,
254 /// 639-2: hye, name: Armenian (Հայերեն)
255 Hy,
256 /// 639-2: her, name: Herero (Otjiherero)
257 Hz,
258 /// 639-2: ina, name: Interlingua
259 Ia,
260 /// 639-2: ind, name: Indonesian (Bahasa Indonesia)
261 Id,
262 /// 639-2: ile, name: Interlingue (Originally called Occidental; then Interlingue after WWII)
263 Ie,
264 /// 639-2: ibo, name: Igbo (Asụsụ Igbo)
265 Ig,
266 /// 639-2: iii, name: Nuosu (ꆈꌠ꒿ Nuosuhxop)
267 Ii,
268 /// 639-2: ipk, name: Inupiaq (Iñupiaq, Iñupiatun)
269 Ik,
270 /// 639-2: ido, name: Ido
271 Io,
272 /// 639-2: isl, name: Icelandic (Íslenska)
273 Is,
274 /// 639-2: ita, name: Italian (Italiano)
275 It,
276 /// 639-2: iku, name: Inuktitut (ᐃᓄᒃᑎᑐᑦ)
277 Iu,
278 /// 639-2: jpn, name: Japanese (日本語 (にほんご))
279 Ja,
280 /// 639-2: jav, name: Javanese (ꦧꦱꦗꦮ, Basa Jawa)
281 Jv,
282 /// 639-2: kat, name: Georgian (ქართული)
283 Ka,
284 /// 639-2: kon, name: Kongo (Kikongo)
285 Kg,
286 /// 639-2: kik, name: Kikuyu, Gikuyu (Gĩkũyũ)
287 Ki,
288 /// 639-2: kua, name: Kwanyama, Kuanyama (Kuanyama)
289 Kj,
290 /// 639-2: kaz, name: Kazakh (қазақ тілі)
291 Kk,
292 /// 639-2: kal, name: Kalaallisut, Greenlandic (kalaallisut, kalaallit oqaasii)
293 Kl,
294 /// 639-2: khm, name: Khmer (ខ្មែរ, ខេមរភាសា, ភាសាខ្មែរ)
295 Km,
296 /// 639-2: kan, name: Kannada (ಕನ್ನಡ)
297 Kn,
298 /// 639-2: kor, name: Korean (한국어)
299 Ko,
300 /// 639-2: kau, name: Kanuri
301 Kr,
302 /// 639-2: kas, name: Kashmiri (कश्मीरी, كشميري)
303 Ks,
304 /// 639-2: kur, name: Kurdish (Kurdî, كوردی)
305 Ku,
306 /// 639-2: kom, name: Komi (коми кыв)
307 Kv,
308 /// 639-2: cor, name: Cornish (Kernewek)
309 Kw,
310 /// 639-2: kir, name: Kyrgyz (Кыргызча, Кыргыз тили)
311 Ky,
312 /// 639-2: lat, name: Latin (latine, lingua latina)
313 La,
314 /// 639-2: ltz, name: Luxembourgish, Letzeburgesch (Lëtzebuergesch)
315 Lb,
316 /// 639-2: lug, name: Ganda (Luganda)
317 Lg,
318 /// 639-2: lim, name: Limburgish, Limburgan, Limburger (Limburgs)
319 Li,
320 /// 639-2: lin, name: Lingala (Lingála)
321 Ln,
322 /// 639-2: lao, name: Lao (ພາສາລາວ)
323 Lo,
324 /// 639-2: lit, name: Lithuanian (lietuvių kalba)
325 Lt,
326 /// 639-2: lub, name: Luba-Katanga (Tshiluba)
327 Lu,
328 /// 639-2: lav, name: Latvian (latviešu valoda)
329 Lv,
330 /// 639-2: mlg, name: Malagasy (fiteny malagasy)
331 Mg,
332 /// 639-2: mah, name: Marshallese (Kajin M̧ajeļ)
333 Mh,
334 /// 639-2: mri, name: Māori (te reo Māori)
335 Mi,
336 /// 639-2: mkd, name: Macedonian (македонски јазик)
337 Mk,
338 /// 639-2: mal, name: Malayalam (മലയാളം)
339 Ml,
340 /// 639-2: mon, name: Mongolian (Монгол хэл)
341 Mn,
342 /// 639-2: mar, name: Marathi (Marāṭhī) (मराठी)
343 Mr,
344 /// 639-2: msa, name: Malay (bahasa Melayu, بهاس ملايو)
345 Ms,
346 /// 639-2: mlt, name: Maltese (Malti)
347 Mt,
348 /// 639-2: mya, name: Burmese (ဗမာစာ)
349 My,
350 /// 639-2: nau, name: Nauruan (Dorerin Naoero)
351 Na,
352 /// 639-2: nob, name: Norwegian Bokmål (Norsk bokmål)
353 Nb,
354 /// 639-2: nde, name: Northern Ndebele (isiNdebele)
355 Nd,
356 /// 639-2: nep, name: Nepali (नेपाली)
357 Ne,
358 /// 639-2: ndo, name: Ndonga (Owambo)
359 Ng,
360 /// 639-2: nld, name: Dutch (Nederlands, Vlaams)
361 Nl,
362 /// 639-2: nno, name: Norwegian Nynorsk (Norsk nynorsk)
363 Nn,
364 /// 639-2: nor, name: Norwegian (Norsk)
365 No,
366 /// 639-2: nbl, name: Southern Ndebele (isiNdebele)
367 Nr,
368 /// 639-2: nav, name: Navajo, Navaho (Diné bizaad)
369 Nv,
370 /// 639-2: nya, name: Chichewa, Chewa, Nyanja (chiCheŵa, chinyanja)
371 Ny,
372 /// 639-2: oci, name: Occitan (occitan, lenga d'òc)
373 Oc,
374 /// 639-2: oji, name: Ojibwe, Ojibwa (ᐊᓂᔑᓈᐯᒧᐎᓐ)
375 Oj,
376 /// 639-2: orm, name: Oromo (Afaan Oromoo)
377 Om,
378 /// 639-2: ori, name: Oriya (ଓଡ଼ିଆ)
379 Or,
380 /// 639-2: oss, name: Ossetian, Ossetic (ирон æвзаг)
381 Os,
382 /// 639-2: pan, name: (Eastern) Punjabi (ਪੰਜਾਬੀ)
383 Pa,
384 /// 639-2: pli, name: Pāli (पाऴि)
385 Pi,
386 /// 639-2: pol, name: Polish (język polski, polszczyzna)
387 Pl,
388 /// 639-2: pus, name: Pashto, Pushto (پښتو)
389 Ps,
390 /// 639-2: por, name: Portuguese (Português)
391 Pt,
392 /// 639-2: que, name: Quechua (Runa Simi, Kichwa)
393 Qu,
394 /// 639-2: roh, name: Romansh (rumantsch grischun)
395 Rm,
396 /// 639-2: run, name: Kirundi (Ikirundi)
397 Rn,
398 /// 639-2: ron, name: Romanian (Română)
399 Ro,
400 /// 639-2: rus, name: Russian (Русский)
401 Ru,
402 /// 639-2: kin, name: Kinyarwanda (Ikinyarwanda)
403 Rw,
404 /// 639-2: san, name: Sanskrit (Saṁskṛta) (संस्कृतम्)
405 Sa,
406 /// 639-2: srd, name: Sardinian (sardu)
407 Sc,
408 /// 639-2: snd, name: Sindhi (सिन्धी, سنڌي، سندھی)
409 Sd,
410 /// 639-2: sme, name: Northern Sami (Davvisámegiella)
411 Se,
412 /// 639-2: sag, name: Sango (yângâ tî sängö)
413 Sg,
414 /// 639-2: sin, name: Sinhalese, Sinhala (සිංහල)
415 Si,
416 /// 639-2: slk, name: Slovak (slovenčina, slovenský jazyk)
417 Sk,
418 /// 639-2: slv, name: Slovene (slovenski jezik, slovenščina)
419 Sl,
420 /// 639-2: smo, name: Samoan (gagana fa'a Samoa)
421 Sm,
422 /// 639-2: sna, name: Shona (chiShona)
423 Sn,
424 /// 639-2: som, name: Somali (Soomaaliga, af Soomaali)
425 So,
426 /// 639-2: sqi, name: Albanian (Shqip)
427 Sq,
428 /// 639-2: srp, name: Serbian (српски језик)
429 Sr,
430 /// 639-2: ssw, name: Swati (SiSwati)
431 Ss,
432 /// 639-2: sot, name: Southern Sotho (Sesotho)
433 St,
434 /// 639-2: sun, name: Sundanese (Basa Sunda)
435 Su,
436 /// 639-2: swe, name: Swedish (svenska)
437 Sv,
438 /// 639-2: swa, name: Swahili (Kiswahili)
439 Sw,
440 /// 639-2: tam, name: Tamil (தமிழ்)
441 Ta,
442 /// 639-2: tel, name: Telugu (తెలుగు)
443 Te,
444 /// 639-2: tgk, name: Tajik (тоҷикӣ, toçikī, تاجیکی)
445 Tg,
446 /// 639-2: tha, name: Thai (ไทย)
447 Th,
448 /// 639-2: tir, name: Tigrinya (ትግርኛ)
449 Ti,
450 /// 639-2: tuk, name: Turkmen (Türkmen, Түркмен)
451 Tk,
452 /// 639-2: tgl, name: Tagalog (Wikang Tagalog)
453 Tl,
454 /// 639-2: tsn, name: Tswana (Setswana)
455 Tn,
456 /// 639-2: ton, name: Tonga (Tonga Islands) (faka Tonga)
457 To,
458 /// 639-2: tur, name: Turkish (Türkçe)
459 Tr,
460 /// 639-2: tso, name: Tsonga (Xitsonga)
461 Ts,
462 /// 639-2: tat, name: Tatar (татар теле, tatar tele)
463 Tt,
464 /// 639-2: twi, name: Twi
465 Tw,
466 /// 639-2: tah, name: Tahitian (Reo Tahiti)
467 Ty,
468 /// 639-2: uig, name: Uyghur (ئۇيغۇرچە, Uyghurche)
469 Ug,
470 /// 639-2: ukr, name: Ukrainian (Українська)
471 Uk,
472 /// 639-2: urd, name: Urdu (اردو)
473 Ur,
474 /// 639-2: uzb, name: Uzbek (Oʻzbek, Ўзбек, أۇزبېك)
475 Uz,
476 /// 639-2: ven, name: Venda (Tshivenḓa)
477 Ve,
478 /// 639-2: vie, name: Vietnamese (Tiếng Việt)
479 Vi,
480 /// 639-2: vol, name: Volapük
481 Vo,
482 /// 639-2: wln, name: Walloon (walon)
483 Wa,
484 /// 639-2: wol, name: Wolof (Wollof)
485 Wo,
486 /// 639-2: xho, name: Xhosa (isiXhosa)
487 Xh,
488 /// 639-2: yid, name: Yiddish (ייִדיש)
489 Yi,
490 /// 639-2: yor, name: Yoruba (Yorùbá)
491 Yo,
492 /// 639-2: zha, name: Zhuang, Chuang (Saɯ cueŋƅ, Saw cuengh)
493 Za,
494 /// 639-2: zho, name: Chinese (中文 (Zhōngwén), 汉语, 漢語)
495 Zh,
496 /// 639-2: zul, name: Zulu (isiZulu)
497 Zu,
498}
499
500impl Iso639_1 {
501 /// Returns the two letters string name.
502 ///
503 /// # Examples
504 /// ```rust
505 /// use iso639_1::Iso639_1;
506 ///
507 /// fn main() {
508 /// assert_eq!(Iso639_1::Fr.name(), "fr");
509 /// }
510 /// ```
511 pub fn name(&self) -> &str {
512 match self {
513 Iso639_1::Aa => "aa",
514 Iso639_1::Ab => "ab",
515 Iso639_1::Ae => "ae",
516 Iso639_1::Af => "af",
517 Iso639_1::Ak => "ak",
518 Iso639_1::Am => "am",
519 Iso639_1::An => "an",
520 Iso639_1::Ar => "ar",
521 Iso639_1::As => "as",
522 Iso639_1::Av => "av",
523 Iso639_1::Ay => "ay",
524 Iso639_1::Az => "az",
525 Iso639_1::Ba => "ba",
526 Iso639_1::Be => "be",
527 Iso639_1::Bg => "bg",
528 Iso639_1::Bh => "bh",
529 Iso639_1::Bi => "bi",
530 Iso639_1::Bm => "bm",
531 Iso639_1::Bn => "bn",
532 Iso639_1::Bo => "bo",
533 Iso639_1::Br => "br",
534 Iso639_1::Bs => "bs",
535 Iso639_1::Ca => "ca",
536 Iso639_1::Ce => "ce",
537 Iso639_1::Ch => "ch",
538 Iso639_1::Co => "co",
539 Iso639_1::Cr => "cr",
540 Iso639_1::Cs => "cs",
541 Iso639_1::Cu => "cu",
542 Iso639_1::Cv => "cv",
543 Iso639_1::Cy => "cy",
544 Iso639_1::Da => "da",
545 Iso639_1::De => "de",
546 Iso639_1::Dv => "dv",
547 Iso639_1::Dz => "dz",
548 Iso639_1::Ee => "ee",
549 Iso639_1::El => "el",
550 Iso639_1::En => "en",
551 Iso639_1::Eo => "eo",
552 Iso639_1::Es => "es",
553 Iso639_1::Et => "et",
554 Iso639_1::Eu => "eu",
555 Iso639_1::Fa => "fa",
556 Iso639_1::Ff => "ff",
557 Iso639_1::Fi => "fi",
558 Iso639_1::Fj => "fj",
559 Iso639_1::Fo => "fo",
560 Iso639_1::Fr => "fr",
561 Iso639_1::Fy => "fy",
562 Iso639_1::Ga => "ga",
563 Iso639_1::Gd => "gd",
564 Iso639_1::Gl => "gl",
565 Iso639_1::Gn => "gn",
566 Iso639_1::Gu => "gu",
567 Iso639_1::Gv => "gv",
568 Iso639_1::Ha => "ha",
569 Iso639_1::He => "he",
570 Iso639_1::Hi => "hi",
571 Iso639_1::Ho => "ho",
572 Iso639_1::Hr => "hr",
573 Iso639_1::Ht => "ht",
574 Iso639_1::Hu => "hu",
575 Iso639_1::Hy => "hy",
576 Iso639_1::Hz => "hz",
577 Iso639_1::Ia => "ia",
578 Iso639_1::Id => "id",
579 Iso639_1::Ie => "ie",
580 Iso639_1::Ig => "ig",
581 Iso639_1::Ii => "ii",
582 Iso639_1::Ik => "ik",
583 Iso639_1::Io => "io",
584 Iso639_1::Is => "is",
585 Iso639_1::It => "it",
586 Iso639_1::Iu => "iu",
587 Iso639_1::Ja => "ja",
588 Iso639_1::Jv => "jv",
589 Iso639_1::Ka => "ka",
590 Iso639_1::Kg => "kg",
591 Iso639_1::Ki => "ki",
592 Iso639_1::Kj => "kj",
593 Iso639_1::Kk => "kk",
594 Iso639_1::Kl => "kl",
595 Iso639_1::Km => "km",
596 Iso639_1::Kn => "kn",
597 Iso639_1::Ko => "ko",
598 Iso639_1::Kr => "kr",
599 Iso639_1::Ks => "ks",
600 Iso639_1::Ku => "ku",
601 Iso639_1::Kv => "kv",
602 Iso639_1::Kw => "kw",
603 Iso639_1::Ky => "ky",
604 Iso639_1::La => "la",
605 Iso639_1::Lb => "lb",
606 Iso639_1::Lg => "lg",
607 Iso639_1::Li => "li",
608 Iso639_1::Ln => "ln",
609 Iso639_1::Lo => "lo",
610 Iso639_1::Lt => "lt",
611 Iso639_1::Lu => "lu",
612 Iso639_1::Lv => "lv",
613 Iso639_1::Mg => "mg",
614 Iso639_1::Mh => "mh",
615 Iso639_1::Mi => "mi",
616 Iso639_1::Mk => "mk",
617 Iso639_1::Ml => "ml",
618 Iso639_1::Mn => "mn",
619 Iso639_1::Mr => "mr",
620 Iso639_1::Ms => "ms",
621 Iso639_1::Mt => "mt",
622 Iso639_1::My => "my",
623 Iso639_1::Na => "na",
624 Iso639_1::Nb => "nb",
625 Iso639_1::Nd => "nd",
626 Iso639_1::Ne => "ne",
627 Iso639_1::Ng => "ng",
628 Iso639_1::Nl => "nl",
629 Iso639_1::Nn => "nn",
630 Iso639_1::No => "no",
631 Iso639_1::Nr => "nr",
632 Iso639_1::Nv => "nv",
633 Iso639_1::Ny => "ny",
634 Iso639_1::Oc => "oc",
635 Iso639_1::Oj => "oj",
636 Iso639_1::Om => "om",
637 Iso639_1::Or => "or",
638 Iso639_1::Os => "os",
639 Iso639_1::Pa => "pa",
640 Iso639_1::Pi => "pi",
641 Iso639_1::Pl => "pl",
642 Iso639_1::Ps => "ps",
643 Iso639_1::Pt => "pt",
644 Iso639_1::Qu => "qu",
645 Iso639_1::Rm => "rm",
646 Iso639_1::Rn => "rn",
647 Iso639_1::Ro => "ro",
648 Iso639_1::Ru => "ru",
649 Iso639_1::Rw => "rw",
650 Iso639_1::Sa => "sa",
651 Iso639_1::Sc => "sc",
652 Iso639_1::Sd => "sd",
653 Iso639_1::Se => "se",
654 Iso639_1::Sg => "sg",
655 Iso639_1::Si => "si",
656 Iso639_1::Sk => "sk",
657 Iso639_1::Sl => "sl",
658 Iso639_1::Sm => "sm",
659 Iso639_1::Sn => "sn",
660 Iso639_1::So => "so",
661 Iso639_1::Sq => "sq",
662 Iso639_1::Sr => "sr",
663 Iso639_1::Ss => "ss",
664 Iso639_1::St => "st",
665 Iso639_1::Su => "su",
666 Iso639_1::Sv => "sv",
667 Iso639_1::Sw => "sw",
668 Iso639_1::Ta => "ta",
669 Iso639_1::Te => "te",
670 Iso639_1::Tg => "tg",
671 Iso639_1::Th => "th",
672 Iso639_1::Ti => "ti",
673 Iso639_1::Tk => "tk",
674 Iso639_1::Tl => "tl",
675 Iso639_1::Tn => "tn",
676 Iso639_1::To => "to",
677 Iso639_1::Tr => "tr",
678 Iso639_1::Ts => "ts",
679 Iso639_1::Tt => "tt",
680 Iso639_1::Tw => "tw",
681 Iso639_1::Ty => "ty",
682 Iso639_1::Ug => "ug",
683 Iso639_1::Uk => "uk",
684 Iso639_1::Ur => "ur",
685 Iso639_1::Uz => "uz",
686 Iso639_1::Ve => "ve",
687 Iso639_1::Vi => "vi",
688 Iso639_1::Vo => "vo",
689 Iso639_1::Wa => "wa",
690 Iso639_1::Wo => "wo",
691 Iso639_1::Xh => "xh",
692 Iso639_1::Yi => "yi",
693 Iso639_1::Yo => "yo",
694 Iso639_1::Za => "za",
695 Iso639_1::Zh => "zh",
696 Iso639_1::Zu => "zu",
697 }
698 }
699}
700
701impl TryFrom<&str> for Iso639_1 {
702 type Error = Iso639v1Error;
703
704 /// Attempts to find a language for an ISO639v1 language code.
705 ///
706 /// # Examples
707 /// ```rust
708 /// use iso639_1::Iso639_1;
709 /// use std::convert::TryFrom;
710 ///
711 /// fn main() {
712 /// let lang = Iso639_1::try_from("fr").unwrap();
713 /// assert_eq!(lang, Iso639_1::Fr);
714 /// }
715 /// ```
716 fn try_from(language: &str) -> Result<Self, Self::Error> {
717 match language {
718 // match iso639-1
719 "aa" => Ok(Iso639_1::Aa),
720 "ab" => Ok(Iso639_1::Ab),
721 "ae" => Ok(Iso639_1::Ae),
722 "af" => Ok(Iso639_1::Af),
723 "ak" => Ok(Iso639_1::Ak),
724 "am" => Ok(Iso639_1::Am),
725 "an" => Ok(Iso639_1::An),
726 "ar" => Ok(Iso639_1::Ar),
727 "as" => Ok(Iso639_1::As),
728 "av" => Ok(Iso639_1::Av),
729 "ay" => Ok(Iso639_1::Ay),
730 "az" => Ok(Iso639_1::Az),
731 "ba" => Ok(Iso639_1::Ba),
732 "be" => Ok(Iso639_1::Be),
733 "bg" => Ok(Iso639_1::Bg),
734 "bh" => Ok(Iso639_1::Bh),
735 "bi" => Ok(Iso639_1::Bi),
736 "bm" => Ok(Iso639_1::Bm),
737 "bn" => Ok(Iso639_1::Bn),
738 "bo" => Ok(Iso639_1::Bo),
739 "br" => Ok(Iso639_1::Br),
740 "bs" => Ok(Iso639_1::Bs),
741 "ca" => Ok(Iso639_1::Ca),
742 "ce" => Ok(Iso639_1::Ce),
743 "ch" => Ok(Iso639_1::Ch),
744 "co" => Ok(Iso639_1::Co),
745 "cr" => Ok(Iso639_1::Cr),
746 "cs" => Ok(Iso639_1::Cs),
747 "cu" => Ok(Iso639_1::Cu),
748 "cv" => Ok(Iso639_1::Cv),
749 "cy" => Ok(Iso639_1::Cy),
750 "da" => Ok(Iso639_1::Da),
751 "de" => Ok(Iso639_1::De),
752 "dv" => Ok(Iso639_1::Dv),
753 "dz" => Ok(Iso639_1::Dz),
754 "ee" => Ok(Iso639_1::Ee),
755 "el" => Ok(Iso639_1::El),
756 "en" => Ok(Iso639_1::En),
757 "eo" => Ok(Iso639_1::Eo),
758 "es" => Ok(Iso639_1::Es),
759 "et" => Ok(Iso639_1::Et),
760 "eu" => Ok(Iso639_1::Eu),
761 "fa" => Ok(Iso639_1::Fa),
762 "ff" => Ok(Iso639_1::Ff),
763 "fi" => Ok(Iso639_1::Fi),
764 "fj" => Ok(Iso639_1::Fj),
765 "fo" => Ok(Iso639_1::Fo),
766 "fr" => Ok(Iso639_1::Fr),
767 "fy" => Ok(Iso639_1::Fy),
768 "ga" => Ok(Iso639_1::Ga),
769 "gd" => Ok(Iso639_1::Gd),
770 "gl" => Ok(Iso639_1::Gl),
771 "gn" => Ok(Iso639_1::Gn),
772 "gu" => Ok(Iso639_1::Gu),
773 "gv" => Ok(Iso639_1::Gv),
774 "ha" => Ok(Iso639_1::Ha),
775 "he" => Ok(Iso639_1::He),
776 "hi" => Ok(Iso639_1::Hi),
777 "ho" => Ok(Iso639_1::Ho),
778 "hr" => Ok(Iso639_1::Hr),
779 "ht" => Ok(Iso639_1::Ht),
780 "hu" => Ok(Iso639_1::Hu),
781 "hy" => Ok(Iso639_1::Hy),
782 "hz" => Ok(Iso639_1::Hz),
783 "ia" => Ok(Iso639_1::Ia),
784 "id" => Ok(Iso639_1::Id),
785 "ie" => Ok(Iso639_1::Ie),
786 "ig" => Ok(Iso639_1::Ig),
787 "ii" => Ok(Iso639_1::Ii),
788 "ik" => Ok(Iso639_1::Ik),
789 "io" => Ok(Iso639_1::Io),
790 "is" => Ok(Iso639_1::Is),
791 "it" => Ok(Iso639_1::It),
792 "iu" => Ok(Iso639_1::Iu),
793 "ja" => Ok(Iso639_1::Ja),
794 "jv" => Ok(Iso639_1::Jv),
795 "ka" => Ok(Iso639_1::Ka),
796 "kg" => Ok(Iso639_1::Kg),
797 "ki" => Ok(Iso639_1::Ki),
798 "kj" => Ok(Iso639_1::Kj),
799 "kk" => Ok(Iso639_1::Kk),
800 "kl" => Ok(Iso639_1::Kl),
801 "km" => Ok(Iso639_1::Km),
802 "kn" => Ok(Iso639_1::Kn),
803 "ko" => Ok(Iso639_1::Ko),
804 "kr" => Ok(Iso639_1::Kr),
805 "ks" => Ok(Iso639_1::Ks),
806 "ku" => Ok(Iso639_1::Ku),
807 "kv" => Ok(Iso639_1::Kv),
808 "kw" => Ok(Iso639_1::Kw),
809 "ky" => Ok(Iso639_1::Ky),
810 "la" => Ok(Iso639_1::La),
811 "lb" => Ok(Iso639_1::Lb),
812 "lg" => Ok(Iso639_1::Lg),
813 "li" => Ok(Iso639_1::Li),
814 "ln" => Ok(Iso639_1::Ln),
815 "lo" => Ok(Iso639_1::Lo),
816 "lt" => Ok(Iso639_1::Lt),
817 "lu" => Ok(Iso639_1::Lu),
818 "lv" => Ok(Iso639_1::Lv),
819 "mg" => Ok(Iso639_1::Mg),
820 "mh" => Ok(Iso639_1::Mh),
821 "mi" => Ok(Iso639_1::Mi),
822 "mk" => Ok(Iso639_1::Mk),
823 "ml" => Ok(Iso639_1::Ml),
824 "mn" => Ok(Iso639_1::Mn),
825 "mr" => Ok(Iso639_1::Mr),
826 "ms" => Ok(Iso639_1::Ms),
827 "mt" => Ok(Iso639_1::Mt),
828 "my" => Ok(Iso639_1::My),
829 "na" => Ok(Iso639_1::Na),
830 "nb" => Ok(Iso639_1::Nb),
831 "nd" => Ok(Iso639_1::Nd),
832 "ne" => Ok(Iso639_1::Ne),
833 "ng" => Ok(Iso639_1::Ng),
834 "nl" => Ok(Iso639_1::Nl),
835 "nn" => Ok(Iso639_1::Nn),
836 "no" => Ok(Iso639_1::No),
837 "nr" => Ok(Iso639_1::Nr),
838 "nv" => Ok(Iso639_1::Nv),
839 "ny" => Ok(Iso639_1::Ny),
840 "oc" => Ok(Iso639_1::Oc),
841 "oj" => Ok(Iso639_1::Oj),
842 "om" => Ok(Iso639_1::Om),
843 "or" => Ok(Iso639_1::Or),
844 "os" => Ok(Iso639_1::Os),
845 "pa" => Ok(Iso639_1::Pa),
846 "pi" => Ok(Iso639_1::Pi),
847 "pl" => Ok(Iso639_1::Pl),
848 "ps" => Ok(Iso639_1::Ps),
849 "pt" => Ok(Iso639_1::Pt),
850 "qu" => Ok(Iso639_1::Qu),
851 "rm" => Ok(Iso639_1::Rm),
852 "rn" => Ok(Iso639_1::Rn),
853 "ro" => Ok(Iso639_1::Ro),
854 "ru" => Ok(Iso639_1::Ru),
855 "rw" => Ok(Iso639_1::Rw),
856 "sa" => Ok(Iso639_1::Sa),
857 "sc" => Ok(Iso639_1::Sc),
858 "sd" => Ok(Iso639_1::Sd),
859 "se" => Ok(Iso639_1::Se),
860 "sg" => Ok(Iso639_1::Sg),
861 "si" => Ok(Iso639_1::Si),
862 "sk" => Ok(Iso639_1::Sk),
863 "sl" => Ok(Iso639_1::Sl),
864 "sm" => Ok(Iso639_1::Sm),
865 "sn" => Ok(Iso639_1::Sn),
866 "so" => Ok(Iso639_1::So),
867 "sq" => Ok(Iso639_1::Sq),
868 "sr" => Ok(Iso639_1::Sr),
869 "ss" => Ok(Iso639_1::Ss),
870 "st" => Ok(Iso639_1::St),
871 "su" => Ok(Iso639_1::Su),
872 "sv" => Ok(Iso639_1::Sv),
873 "sw" => Ok(Iso639_1::Sw),
874 "ta" => Ok(Iso639_1::Ta),
875 "te" => Ok(Iso639_1::Te),
876 "tg" => Ok(Iso639_1::Tg),
877 "th" => Ok(Iso639_1::Th),
878 "ti" => Ok(Iso639_1::Ti),
879 "tk" => Ok(Iso639_1::Tk),
880 "tl" => Ok(Iso639_1::Tl),
881 "tn" => Ok(Iso639_1::Tn),
882 "to" => Ok(Iso639_1::To),
883 "tr" => Ok(Iso639_1::Tr),
884 "ts" => Ok(Iso639_1::Ts),
885 "tt" => Ok(Iso639_1::Tt),
886 "tw" => Ok(Iso639_1::Tw),
887 "ty" => Ok(Iso639_1::Ty),
888 "ug" => Ok(Iso639_1::Ug),
889 "uk" => Ok(Iso639_1::Uk),
890 "ur" => Ok(Iso639_1::Ur),
891 "uz" => Ok(Iso639_1::Uz),
892 "ve" => Ok(Iso639_1::Ve),
893 "vi" => Ok(Iso639_1::Vi),
894 "vo" => Ok(Iso639_1::Vo),
895 "wa" => Ok(Iso639_1::Wa),
896 "wo" => Ok(Iso639_1::Wo),
897 "xh" => Ok(Iso639_1::Xh),
898 "yi" => Ok(Iso639_1::Yi),
899 "yo" => Ok(Iso639_1::Yo),
900 "za" => Ok(Iso639_1::Za),
901 "zh" => Ok(Iso639_1::Zh),
902 "zu" => Ok(Iso639_1::Zu),
903 _ => Err(Iso639v1Error::from(Iso639v1ErrorKind::NotFoundFrom(
904 language.to_string(),
905 ))),
906 }
907 }
908}
909
910// ------------------------------------------------------------------------------------
911// to_iso639_3(language: &str) -> &str
912// ------------------------------------------------------------------------------------
913/// get iso639-3 string (3 chars) switch iso639-1 string (2 chars) - or error ``Iso639v1Error``
914///
915/// # Examples
916/// ```rust
917/// extern crate iso639_1;
918/// use iso639_1::to_iso639_3;
919/// fn main() {
920/// let lang = to_iso639_3("fr").unwrap();
921/// assert!(lang == "fra");
922/// }
923/// ```
924pub fn to_iso639_3(language: &str) -> Result<&str, Iso639v1Error> {
925 match language {
926 "aa" => Ok("aar"),
927 "ab" => Ok("abk"),
928 "ae" => Ok("ave"),
929 "af" => Ok("afr"),
930 "ak" => Ok("aka"),
931 "am" => Ok("amh"),
932 "an" => Ok("arg"),
933 "ar" => Ok("ara"),
934 "as" => Ok("asm"),
935 "av" => Ok("ava"),
936 "ay" => Ok("aym"),
937 "az" => Ok("aze"),
938 "ba" => Ok("bak"),
939 "be" => Ok("bel"),
940 "bg" => Ok("bul"),
941 "bh" => Ok("bih"),
942 "bi" => Ok("bis"),
943 "bm" => Ok("bam"),
944 "bn" => Ok("ben"),
945 "bo" => Ok("bod"),
946 "br" => Ok("bre"),
947 "bs" => Ok("bos"),
948 "ca" => Ok("cat"),
949 "ce" => Ok("che"),
950 "ch" => Ok("cha"),
951 "co" => Ok("cos"),
952 "cr" => Ok("cre"),
953 "cs" => Ok("ces"),
954 "cu" => Ok("chu"),
955 "cv" => Ok("chv"),
956 "cy" => Ok("cym"),
957 "da" => Ok("dan"),
958 "de" => Ok("deu"),
959 "dv" => Ok("div"),
960 "dz" => Ok("dzo"),
961 "ee" => Ok("ewe"),
962 "el" => Ok("ell"),
963 "en" => Ok("eng"),
964 "eo" => Ok("epo"),
965 "es" => Ok("spa"),
966 "et" => Ok("est"),
967 "eu" => Ok("eus"),
968 "fa" => Ok("fas"),
969 "ff" => Ok("ful"),
970 "fi" => Ok("fin"),
971 "fj" => Ok("fij"),
972 "fo" => Ok("fao"),
973 "fr" => Ok("fra"),
974 "fy" => Ok("fry"),
975 "ga" => Ok("gle"),
976 "gd" => Ok("gla"),
977 "gl" => Ok("glg"),
978 "gn" => Ok("grn"),
979 "gu" => Ok("guj"),
980 "gv" => Ok("glv"),
981 "ha" => Ok("hau"),
982 "he" => Ok("heb"),
983 "hi" => Ok("hin"),
984 "ho" => Ok("hmo"),
985 "hr" => Ok("hrv"),
986 "ht" => Ok("hat"),
987 "hu" => Ok("hun"),
988 "hy" => Ok("hye"),
989 "hz" => Ok("her"),
990 "ia" => Ok("ina"),
991 "id" => Ok("ind"),
992 "ie" => Ok("ile"),
993 "ig" => Ok("ibo"),
994 "ii" => Ok("iii"),
995 "ik" => Ok("ipk"),
996 "io" => Ok("ido"),
997 "is" => Ok("isl"),
998 "it" => Ok("ita"),
999 "iu" => Ok("iku"),
1000 "ja" => Ok("jpn"),
1001 "jv" => Ok("jav"),
1002 "ka" => Ok("kat"),
1003 "kg" => Ok("kon"),
1004 "ki" => Ok("kik"),
1005 "kj" => Ok("kua"),
1006 "kk" => Ok("kaz"),
1007 "kl" => Ok("kal"),
1008 "km" => Ok("khm"),
1009 "kn" => Ok("kan"),
1010 "ko" => Ok("kor"),
1011 "kr" => Ok("kau"),
1012 "ks" => Ok("kas"),
1013 "ku" => Ok("kur"),
1014 "kv" => Ok("kom"),
1015 "kw" => Ok("cor"),
1016 "ky" => Ok("kir"),
1017 "la" => Ok("lat"),
1018 "lb" => Ok("ltz"),
1019 "lg" => Ok("lug"),
1020 "li" => Ok("lim"),
1021 "ln" => Ok("lin"),
1022 "lo" => Ok("lao"),
1023 "lt" => Ok("lit"),
1024 "lu" => Ok("lub"),
1025 "lv" => Ok("lav"),
1026 "mg" => Ok("mlg"),
1027 "mh" => Ok("mah"),
1028 "mi" => Ok("mri"),
1029 "mk" => Ok("mkd"),
1030 "ml" => Ok("mal"),
1031 "mn" => Ok("mon"),
1032 "mr" => Ok("mar"),
1033 "ms" => Ok("msa"),
1034 "mt" => Ok("mlt"),
1035 "my" => Ok("mya"),
1036 "na" => Ok("nau"),
1037 "nb" => Ok("nob"),
1038 "nd" => Ok("nde"),
1039 "ne" => Ok("nep"),
1040 "ng" => Ok("ndo"),
1041 "nl" => Ok("nld"),
1042 "nn" => Ok("nno"),
1043 "no" => Ok("nor"),
1044 "nr" => Ok("nbl"),
1045 "nv" => Ok("nav"),
1046 "ny" => Ok("nya"),
1047 "oc" => Ok("oci"),
1048 "oj" => Ok("oji"),
1049 "om" => Ok("orm"),
1050 "or" => Ok("ori"),
1051 "os" => Ok("oss"),
1052 "pa" => Ok("pan"),
1053 "pi" => Ok("pli"),
1054 "pl" => Ok("pol"),
1055 "ps" => Ok("pus"),
1056 "pt" => Ok("por"),
1057 "qu" => Ok("que"),
1058 "rm" => Ok("roh"),
1059 "rn" => Ok("run"),
1060 "ro" => Ok("ron"),
1061 "ru" => Ok("rus"),
1062 "rw" => Ok("kin"),
1063 "sa" => Ok("san"),
1064 "sc" => Ok("srd"),
1065 "sd" => Ok("snd"),
1066 "se" => Ok("sme"),
1067 "sg" => Ok("sag"),
1068 "si" => Ok("sin"),
1069 "sk" => Ok("slk"),
1070 "sl" => Ok("slv"),
1071 "sm" => Ok("smo"),
1072 "sn" => Ok("sna"),
1073 "so" => Ok("som"),
1074 "sq" => Ok("sqi"),
1075 "sr" => Ok("srp"),
1076 "ss" => Ok("ssw"),
1077 "st" => Ok("sot"),
1078 "su" => Ok("sun"),
1079 "sv" => Ok("swe"),
1080 "sw" => Ok("swa"),
1081 "ta" => Ok("tam"),
1082 "te" => Ok("tel"),
1083 "tg" => Ok("tgk"),
1084 "th" => Ok("tha"),
1085 "ti" => Ok("tir"),
1086 "tk" => Ok("tuk"),
1087 "tl" => Ok("tgl"),
1088 "tn" => Ok("tsn"),
1089 "to" => Ok("ton"),
1090 "tr" => Ok("tur"),
1091 "ts" => Ok("tso"),
1092 "tt" => Ok("tat"),
1093 "tw" => Ok("twi"),
1094 "ty" => Ok("tah"),
1095 "ug" => Ok("uig"),
1096 "uk" => Ok("ukr"),
1097 "ur" => Ok("urd"),
1098 "uz" => Ok("uzb"),
1099 "ve" => Ok("ven"),
1100 "vi" => Ok("vie"),
1101 "vo" => Ok("vol"),
1102 "wa" => Ok("wln"),
1103 "wo" => Ok("wol"),
1104 "xh" => Ok("xho"),
1105 "yi" => Ok("yid"),
1106 "yo" => Ok("yor"),
1107 "za" => Ok("zha"),
1108 "zh" => Ok("zho"),
1109 "zu" => Ok("zul"),
1110 _ => Err(Iso639v1Error::from(Iso639v1ErrorKind::NotFoundTo(
1111 language.to_string(),
1112 ))),
1113 }
1114}