iso_4217/
impls.rs

1use crate::impl_curr_code;
2
3impl_curr_code! {
4    /// [`CurrencyCode`] represents [`ISO-4217`] currency code enumeration.
5    ///
6    /// [`CurrencyCode`]: ./enum.CurrencyCode.html
7    /// [`ISO-4217`]: https://en.wikipedia.org/wiki/ISO_4217
8    #[derive(Debug, PartialEq, Clone, Copy)]
9    (pub) enum CurrencyCode {
10        AED { num: 784, digit: Some(2), name: "United Arab Emirates dirham", },
11        AFN { num: 971, digit: Some(2), name: "Afghan afghani", },
12        ALL { num: 008, digit: Some(2), name: "Albanian lek", },
13        AMD { num: 051, digit: Some(2), name: "Armenian dram", },
14        ANG { num: 532, digit: Some(2), name: "Netherlands Antillean guilder", },
15        AOA { num: 973, digit: Some(2), name: "Angolan kwanza", },
16        ARS { num: 032, digit: Some(2), name: "Argentine peso", },
17        AUD { num: 036, digit: Some(2), name: "Australian dollar", },
18        AWG { num: 533, digit: Some(2), name: "Aruban florin", },
19        AZN { num: 944, digit: Some(2), name: "Azerbaijani manat", },
20        BAM { num: 977, digit: Some(2), name: "Bosnia and Herzegovina convertible mark", },
21        BBD { num: 052, digit: Some(2), name: "Barbados dollar", },
22        BDT { num: 050, digit: Some(2), name: "Bangladeshi taka", },
23        BGN { num: 975, digit: Some(2), name: "Bulgarian lev", },
24        BHD { num: 048, digit: Some(3), name: "Bahraini dinar", },
25        BIF { num: 108, digit: Some(0), name: "Burundian franc", },
26        BMD { num: 060, digit: Some(2), name: "Bermudian dollar", },
27        BND { num: 096, digit: Some(2), name: "Brunei dollar", },
28        BOB { num: 068, digit: Some(2), name: "Boliviano", },
29        BOV { num: 984, digit: Some(2), name: "Bolivian Mvdol (funds code)", },
30        BRL { num: 986, digit: Some(2), name: "Brazilian real", },
31        BSD { num: 044, digit: Some(2), name: "Bahamian dollar", },
32        BTN { num: 064, digit: Some(2), name: "Bhutanese ngultrum", },
33        BWP { num: 072, digit: Some(2), name: "Botswana pula", },
34        BYN { num: 933, digit: Some(2), name: "Belarusian ruble", },
35        BZD { num: 084, digit: Some(2), name: "Belize dollar", },
36        CAD { num: 124, digit: Some(2), name: "Canadian dollar", },
37        CDF { num: 976, digit: Some(2), name: "Congolese franc", },
38        CHE { num: 947, digit: Some(2), name: "WIR Euro (complementary currency)", },
39        CHF { num: 756, digit: Some(2), name: "Swiss franc", },
40        CHW { num: 948, digit: Some(2), name: "WIR Franc (complementary currency)", },
41        CLF { num: 990, digit: Some(4), name: "Unidad de Fomento (funds code)", },
42        CLP { num: 152, digit: Some(0), name: "Chilean peso", },
43        CNY { num: 156, digit: Some(2), name: "Renminbi (Chinese) yuan", },
44        COP { num: 170, digit: Some(2), name: "Colombian peso", },
45        COU { num: 970, digit: Some(2), name: "Unidad de Valor Real (UVR) (funds code)", },
46        CRC { num: 188, digit: Some(2), name: "Costa Rican colon", },
47        CUC { num: 931, digit: Some(2), name: "Cuban convertible peso", },
48        CUP { num: 192, digit: Some(2), name: "Cuban peso", },
49        CVE { num: 132, digit: Some(2), name: "Cape Verdean escudo", },
50        CZK { num: 203, digit: Some(2), name: "Czech koruna", },
51        DJF { num: 262, digit: Some(0), name: "Djiboutian franc", },
52        DKK { num: 208, digit: Some(2), name: "Danish krone", },
53        DOP { num: 214, digit: Some(2), name: "Dominican peso", },
54        DZD { num: 012, digit: Some(2), name: "Algerian dinar", },
55        EGP { num: 818, digit: Some(2), name: "Egyptian pound", },
56        ERN { num: 232, digit: Some(2), name: "Eritrean nakfa", },
57        ETB { num: 230, digit: Some(2), name: "Ethiopian birr", },
58        EUR { num: 978, digit: Some(2), name: "Euro", },
59        FJD { num: 242, digit: Some(2), name: "Fiji dollar", },
60        FKP { num: 238, digit: Some(2), name: "Falkland Islands pound", },
61        GBP { num: 826, digit: Some(2), name: "Pound sterling", },
62        GEL { num: 981, digit: Some(2), name: "Georgian lari", },
63        GHS { num: 936, digit: Some(2), name: "Ghanaian cedi", },
64        GIP { num: 292, digit: Some(2), name: "Gibraltar pound", },
65        GMD { num: 270, digit: Some(2), name: "Gambian dalasi", },
66        GNF { num: 324, digit: Some(0), name: "Guinean franc", },
67        GTQ { num: 320, digit: Some(2), name: "Guatemalan quetzal", },
68        GYD { num: 328, digit: Some(2), name: "Guyanese dollar", },
69        HKD { num: 344, digit: Some(2), name: "Hong Kong dollar", },
70        HNL { num: 340, digit: Some(2), name: "Honduran lempira", },
71        HRK { num: 191, digit: Some(2), name: "Croatian kuna", },
72        HTG { num: 332, digit: Some(2), name: "Haitian gourde", },
73        HUF { num: 348, digit: Some(2), name: "Hungarian forint", },
74        IDR { num: 360, digit: Some(2), name: "Indonesian rupiah", },
75        ILS { num: 376, digit: Some(2), name: "Israeli new shekel", },
76        INR { num: 356, digit: Some(2), name: "Indian rupee", },
77        IQD { num: 368, digit: Some(3), name: "Iraqi dinar", },
78        IRR { num: 364, digit: Some(2), name: "Iranian rial", },
79        ISK { num: 352, digit: Some(0), name: "Icelandic króna", },
80        JMD { num: 388, digit: Some(2), name: "Jamaican dollar", },
81        JOD { num: 400, digit: Some(3), name: "Jordanian dinar", },
82        JPY { num: 392, digit: Some(0), name: "Japanese yen", },
83        KES { num: 404, digit: Some(2), name: "Kenyan shilling", },
84        KGS { num: 417, digit: Some(2), name: "Kyrgyzstani som", },
85        KHR { num: 116, digit: Some(2), name: "Cambodian riel", },
86        KMF { num: 174, digit: Some(0), name: "Comoro franc", },
87        KPW { num: 408, digit: Some(2), name: "North Korean won", },
88        KRW { num: 410, digit: Some(0), name: "South Korean won", },
89        KWD { num: 414, digit: Some(3), name: "Kuwaiti dinar", },
90        KYD { num: 136, digit: Some(2), name: "Cayman Islands dollar", },
91        KZT { num: 398, digit: Some(2), name: "Kazakhstani tenge", },
92        LAK { num: 418, digit: Some(2), name: "Lao kip", },
93        LBP { num: 422, digit: Some(2), name: "Lebanese pound", },
94        LKR { num: 144, digit: Some(2), name: "Sri Lankan rupee", },
95        LRD { num: 430, digit: Some(2), name: "Liberian dollar", },
96        LSL { num: 426, digit: Some(2), name: "Lesotho loti", },
97        LYD { num: 434, digit: Some(3), name: "Libyan dinar", },
98        MAD { num: 504, digit: Some(2), name: "Moroccan dirham", },
99        MDL { num: 498, digit: Some(2), name: "Moldovan leu", },
100        MGA { num: 969, digit: Some(2), name: "Malagasy ariary", },
101        MKD { num: 807, digit: Some(2), name: "Macedonian denar", },
102        MMK { num: 104, digit: Some(2), name: "Myanmar kyat", },
103        MNT { num: 496, digit: Some(2), name: "Mongolian tögrög", },
104        MOP { num: 446, digit: Some(2), name: "Macanese pataca", },
105        MRU { num: 929, digit: Some(2), name: "Mauritanian ouguiya", },
106        MUR { num: 480, digit: Some(2), name: "Mauritian rupee", },
107        MVR { num: 462, digit: Some(2), name: "Maldivian rufiyaa", },
108        MWK { num: 454, digit: Some(2), name: "Malawian kwacha", },
109        MXN { num: 484, digit: Some(2), name: "Mexican peso", },
110        MXV { num: 979, digit: Some(2), name: "Mexican Unidad de Inversion (UDI) (funds code)", },
111        MYR { num: 458, digit: Some(2), name: "Malaysian ringgit", },
112        MZN { num: 943, digit: Some(2), name: "Mozambican metical", },
113        NAD { num: 516, digit: Some(2), name: "Namibian dollar", },
114        NGN { num: 566, digit: Some(2), name: "Nigerian naira", },
115        NIO { num: 558, digit: Some(2), name: "Nicaraguan córdoba", },
116        NOK { num: 578, digit: Some(2), name: "Norwegian krone", },
117        NPR { num: 524, digit: Some(2), name: "Nepalese rupee", },
118        NZD { num: 554, digit: Some(2), name: "New Zealand dollar", },
119        OMR { num: 512, digit: Some(3), name: "Omani rial", },
120        PAB { num: 590, digit: Some(2), name: "Panamanian balboa", },
121        PEN { num: 604, digit: Some(2), name: "Peruvian sol", },
122        PGK { num: 598, digit: Some(2), name: "Papua New Guinean kina", },
123        PHP { num: 608, digit: Some(2), name: "Philippine peso", },
124        PKR { num: 586, digit: Some(2), name: "Pakistani rupee", },
125        PLN { num: 985, digit: Some(2), name: "Polish złoty", },
126        PYG { num: 600, digit: Some(0), name: "Paraguayan guaraní", },
127        QAR { num: 634, digit: Some(2), name: "Qatari riyal", },
128        RON { num: 946, digit: Some(2), name: "Romanian leu", },
129        RSD { num: 941, digit: Some(2), name: "Serbian dinar", },
130        RUB { num: 643, digit: Some(2), name: "Russian ruble", },
131        RWF { num: 646, digit: Some(0), name: "Rwandan franc", },
132        SAR { num: 682, digit: Some(2), name: "Saudi riyal", },
133        SBD { num: 090, digit: Some(2), name: "Solomon Islands dollar", },
134        SCR { num: 690, digit: Some(2), name: "Seychelles rupee", },
135        SDG { num: 938, digit: Some(2), name: "Sudanese pound", },
136        SEK { num: 752, digit: Some(2), name: "Swedish krona/kronor", },
137        SGD { num: 702, digit: Some(2), name: "Singapore dollar", },
138        SHP { num: 654, digit: Some(2), name: "Saint Helena pound", },
139        SLL { num: 694, digit: Some(2), name: "Sierra Leonean leone", },
140        SOS { num: 706, digit: Some(2), name: "Somali shilling", },
141        SRD { num: 968, digit: Some(2), name: "Surinamese dollar", },
142        SSP { num: 728, digit: Some(2), name: "South Sudanese pound", },
143        STN { num: 930, digit: Some(2), name: "São Tomé and Príncipe dobra", },
144        SVC { num: 222, digit: Some(2), name: "Salvadoran colón", },
145        SYP { num: 760, digit: Some(2), name: "Syrian pound", },
146        SZL { num: 748, digit: Some(2), name: "Swazi lilangeni", },
147        THB { num: 764, digit: Some(2), name: "Thai baht", },
148        TJS { num: 972, digit: Some(2), name: "Tajikistani somoni", },
149        TMT { num: 934, digit: Some(2), name: "Turkmenistan manat", },
150        TND { num: 788, digit: Some(3), name: "Tunisian dinar", },
151        TOP { num: 776, digit: Some(2), name: "Tongan paʻanga", },
152        TRY { num: 949, digit: Some(2), name: "Turkish lira", },
153        TTD { num: 780, digit: Some(2), name: "Trinidad and Tobago dollar", },
154        TWD { num: 901, digit: Some(2), name: "New Taiwan dollar", },
155        TZS { num: 834, digit: Some(2), name: "Tanzanian shilling", },
156        UAH { num: 980, digit: Some(2), name: "Ukrainian hryvnia", },
157        UGX { num: 800, digit: Some(0), name: "Ugandan shilling", },
158        USD { num: 840, digit: Some(2), name: "United States dollar", },
159        USN { num: 997, digit: Some(2), name: "United States dollar (next day) (funds code)", },
160        UYI { num: 940, digit: Some(0), name: "Uruguay Peso en Unidades Indexadas (URUIURUI) (funds code)", },
161        UYU { num: 858, digit: Some(2), name: "Uruguayan peso", },
162        UYW { num: 927, digit: Some(4), name: "Unidad previsional", },
163        UZS { num: 860, digit: Some(2), name: "Uzbekistan som", },
164        VES { num: 928, digit: Some(2), name: "Venezuelan bolívar soberano", },
165        VND { num: 704, digit: Some(0), name: "Vietnamese đồng", },
166        VUV { num: 548, digit: Some(0), name: "Vanuatu vatu", },
167        WST { num: 882, digit: Some(2), name: "Samoan tala", },
168        XAF { num: 950, digit: Some(0), name: "CFA franc BEAC", },
169        XAG { num: 961, digit: None, name: "Silver (one troy ounce)", },
170        XAU { num: 959, digit: None, name: "Gold (one troy ounce)", },
171        XBA { num: 955, digit: None, name: "European Composite Unit (EURCO) (bond market unit)", },
172        XBB { num: 956, digit: None, name: "European Monetary Unit (E.M.U.-6) (bond market unit)", },
173        XBC { num: 957, digit: None, name: "European Unit of Account 9 (E.U.A.-9) (bond market unit)", },
174        XBD { num: 958, digit: None, name: "European Unit of Account 17 (E.U.A.-17) (bond market unit)", },
175        XCD { num: 951, digit: Some(2), name: "East Caribbean dollar", },
176        XDR { num: 960, digit: None, name: "Special drawing rights", },
177        XOF { num: 952, digit: Some(0), name: "CFA franc BCEAO", },
178        XPD { num: 964, digit: None, name: "Palladium (one troy ounce)", },
179        XPF { num: 953, digit: Some(0), name: "CFP franc (franc Pacifique)", },
180        XPT { num: 962, digit: None, name: "Platinum (one troy ounce)", },
181        XSU { num: 994, digit: None, name: "SUCRE", },
182        XTS { num: 963, digit: None, name: "Code reserved for testing", },
183        XUA { num: 965, digit: None, name: "ADB Unit of Account", },
184        XXX { num: 999, digit: None, name: "No currency", },
185        YER { num: 886, digit: Some(2), name: "Yemeni rial", },
186        ZAR { num: 710, digit: Some(2), name: "South African rand", },
187        ZMW { num: 967, digit: Some(2), name: "Zambian kwacha", },
188        ZWL { num: 932, digit: Some(2), name: "Zimbabwean dollar", },
189    }
190}
191
192#[cfg(test)]
193mod test {
194    use super::*;
195
196    #[test]
197    fn currency_code_impl_test() {
198        let jpy = CurrencyCode::JPY;
199
200        assert_eq!(jpy.alpha(), "JPY");
201        assert_eq!(jpy.num(), 392);
202        assert_eq!(jpy.name(), "Japanese yen");
203        assert_eq!(jpy.digit(), Some(0));
204    }
205
206    #[test]
207    fn trait_impl_test() -> Result<(), Box<dyn std::error::Error>> {
208        use std::convert::{From, TryFrom};
209
210        {
211            let code = "JPY";
212            let curr: CurrencyCode = code.parse()?;
213            assert_eq!(curr, CurrencyCode::JPY);
214        }
215
216        {
217            let code = "JPY";
218
219            let curr: CurrencyCode = TryFrom::try_from(code)?;
220            assert_eq!(curr, CurrencyCode::JPY);
221
222            let v: &str = From::from(curr);
223            assert_eq!(v, code);
224        }
225
226        {
227            let code = 392;
228
229            let curr: CurrencyCode = TryFrom::try_from(code)?;
230            assert_eq!(curr, CurrencyCode::JPY);
231
232            let v: u32 = From::from(curr);
233            assert_eq!(v, code);
234        }
235
236        Ok(())
237    }
238}