iso639_1/
lib.rs

1//! # iso639-1
2//!
3//! [![Build Status](https://travis-ci.org/AlbanMinassian/iso639.svg?branch=master)](https://travis-ci.org/AlbanMinassian/iso639)
4//! [![codecov](https://codecov.io/gh/AlbanMinassian/iso639/branch/master/graph/badge.svg)](https://codecov.io/gh/AlbanMinassian/iso639)
5//! [![License:MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6//! [![iso639-1 Latest Version](https://img.shields.io/crates/v/iso639-1.svg)](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}