1use crate::impl_curr_code;
2
3impl_curr_code! {
4 #[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}