1use serde::{Deserialize, Serialize};
2
3use crate::params::to_snakecase;
4
5#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq, Hash, Default)]
9pub enum Currency {
10 #[serde(rename = "byn")]
11 BYN, #[serde(rename = "mmk")]
13 MMK, #[serde(rename = "aed")]
15 AED, #[serde(rename = "afn")]
17 AFN, #[serde(rename = "all")]
19 ALL, #[serde(rename = "amd")]
21 AMD, #[serde(rename = "ang")]
23 ANG, #[serde(rename = "aoa")]
25 AOA, #[serde(rename = "ars")]
27 ARS, #[serde(rename = "aud")]
29 AUD, #[serde(rename = "awg")]
31 AWG, #[serde(rename = "azn")]
33 AZN, #[serde(rename = "bam")]
35 BAM, #[serde(rename = "bbd")]
37 BBD, #[serde(rename = "bdt")]
39 BDT, #[serde(rename = "bgn")]
41 BGN, #[serde(rename = "bif")]
43 BIF, #[serde(rename = "bmd")]
45 BMD, #[serde(rename = "bnd")]
47 BND, #[serde(rename = "bob")]
49 BOB, #[serde(rename = "brl")]
51 BRL, #[serde(rename = "bsd")]
53 BSD, #[serde(rename = "bwp")]
55 BWP, #[serde(rename = "bzd")]
57 BZD, #[serde(rename = "cad")]
59 CAD, #[serde(rename = "cdf")]
61 CDF, #[serde(rename = "chf")]
63 CHF, #[serde(rename = "clp")]
65 CLP, #[serde(rename = "cny")]
67 CNY, #[serde(rename = "cop")]
69 COP, #[serde(rename = "crc")]
71 CRC, #[serde(rename = "cve")]
73 CVE, #[serde(rename = "czk")]
75 CZK, #[serde(rename = "djf")]
77 DJF, #[serde(rename = "dkk")]
79 DKK, #[serde(rename = "dop")]
81 DOP, #[serde(rename = "dzd")]
83 DZD, #[serde(rename = "eek")]
85 EEK, #[serde(rename = "egp")]
87 EGP, #[serde(rename = "etb")]
89 ETB, #[serde(rename = "eur")]
91 EUR, #[serde(rename = "fjd")]
93 FJD, #[serde(rename = "fkp")]
95 FKP, #[serde(rename = "gbp")]
97 GBP, #[serde(rename = "gel")]
99 GEL, #[serde(rename = "gip")]
101 GIP, #[serde(rename = "gmd")]
103 GMD, #[serde(rename = "gnf")]
105 GNF, #[serde(rename = "gtq")]
107 GTQ, #[serde(rename = "gyd")]
109 GYD, #[serde(rename = "hkd")]
111 HKD, #[serde(rename = "hnl")]
113 HNL, #[serde(rename = "hrk")]
115 HRK, #[serde(rename = "htg")]
117 HTG, #[serde(rename = "huf")]
119 HUF, #[serde(rename = "idr")]
121 IDR, #[serde(rename = "ils")]
123 ILS, #[serde(rename = "inr")]
125 INR, #[serde(rename = "isk")]
127 ISK, #[serde(rename = "jmd")]
129 JMD, #[serde(rename = "jpy")]
131 JPY, #[serde(rename = "kes")]
133 KES, #[serde(rename = "kgs")]
135 KGS, #[serde(rename = "khr")]
137 KHR, #[serde(rename = "kmf")]
139 KMF, #[serde(rename = "krw")]
141 KRW, #[serde(rename = "kyd")]
143 KYD, #[serde(rename = "kzt")]
145 KZT, #[serde(rename = "lak")]
147 LAK, #[serde(rename = "lbp")]
149 LBP, #[serde(rename = "lkr")]
151 LKR, #[serde(rename = "lrd")]
153 LRD, #[serde(rename = "lsl")]
155 LSL, #[serde(rename = "ltl")]
157 LTL, #[serde(rename = "lvl")]
159 LVL, #[serde(rename = "mad")]
161 MAD, #[serde(rename = "mdl")]
163 MDL, #[serde(rename = "mga")]
165 MGA, #[serde(rename = "mkd")]
167 MKD, #[serde(rename = "mnt")]
169 MNT, #[serde(rename = "mop")]
171 MOP, #[serde(rename = "mro")]
173 MRO, #[serde(rename = "mur")]
175 MUR, #[serde(rename = "mvr")]
177 MVR, #[serde(rename = "mwk")]
179 MWK, #[serde(rename = "mxn")]
181 MXN, #[serde(rename = "myr")]
183 MYR, #[serde(rename = "mzn")]
185 MZN, #[serde(rename = "nad")]
187 NAD, #[serde(rename = "ngn")]
189 NGN, #[serde(rename = "nio")]
191 NIO, #[serde(rename = "nok")]
193 NOK, #[serde(rename = "npr")]
195 NPR, #[serde(rename = "nzd")]
197 NZD, #[serde(rename = "pab")]
199 PAB, #[serde(rename = "pen")]
201 PEN, #[serde(rename = "pgk")]
203 PGK, #[serde(rename = "php")]
205 PHP, #[serde(rename = "pkr")]
207 PKR, #[serde(rename = "pln")]
209 PLN, #[serde(rename = "pyg")]
211 PYG, #[serde(rename = "qar")]
213 QAR, #[serde(rename = "ron")]
215 RON, #[serde(rename = "rsd")]
217 RSD, #[serde(rename = "rub")]
219 RUB, #[serde(rename = "rwf")]
221 RWF, #[serde(rename = "sar")]
223 SAR, #[serde(rename = "sbd")]
225 SBD, #[serde(rename = "scr")]
227 SCR, #[serde(rename = "sek")]
229 SEK, #[serde(rename = "sgd")]
231 SGD, #[serde(rename = "shp")]
233 SHP, #[serde(rename = "sll")]
235 SLL, #[serde(rename = "sos")]
237 SOS, #[serde(rename = "srd")]
239 SRD, #[serde(rename = "std")]
241 STD, #[serde(rename = "svc")]
243 SVC, #[serde(rename = "szl")]
245 SZL, #[serde(rename = "thb")]
247 THB, #[serde(rename = "tjs")]
249 TJS, #[serde(rename = "top")]
251 TOP, #[serde(rename = "try")]
253 TRY, #[serde(rename = "ttd")]
255 TTD, #[serde(rename = "twd")]
257 TWD, #[serde(rename = "tzs")]
259 TZS, #[serde(rename = "uah")]
261 UAH, #[serde(rename = "ugx")]
263 UGX, #[serde(rename = "usd")]
265 #[default]
266 USD, #[serde(rename = "uyu")]
268 UYU, #[serde(rename = "uzs")]
270 UZS, #[serde(rename = "vef")]
272 VEF, #[serde(rename = "vnd")]
274 VND, #[serde(rename = "vuv")]
276 VUV, #[serde(rename = "wst")]
278 WST, #[serde(rename = "xaf")]
280 XAF, #[serde(rename = "xcd")]
282 XCD, #[serde(rename = "xof")]
284 XOF, #[serde(rename = "xpf")]
286 XPF, #[serde(rename = "yer")]
288 YER, #[serde(rename = "zar")]
290 ZAR, #[serde(rename = "zmw")]
292 ZMW, }
294
295impl std::fmt::Display for Currency {
296 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
297 write!(f, "{}", to_snakecase(&format!("{:?}", self)))
298 }
299}
300
301impl std::str::FromStr for Currency {
302 type Err = ParseCurrencyError;
303 fn from_str(s: &str) -> Result<Self, Self::Err> {
304 match s {
305 "aed" => Ok(Currency::AED),
306 "afn" => Ok(Currency::AFN),
307 "all" => Ok(Currency::ALL),
308 "amd" => Ok(Currency::AMD),
309 "ang" => Ok(Currency::ANG),
310 "aoa" => Ok(Currency::AOA),
311 "ars" => Ok(Currency::ARS),
312 "aud" => Ok(Currency::AUD),
313 "awg" => Ok(Currency::AWG),
314 "azn" => Ok(Currency::AZN),
315 "bam" => Ok(Currency::BAM),
316 "bbd" => Ok(Currency::BBD),
317 "bdt" => Ok(Currency::BDT),
318 "bgn" => Ok(Currency::BGN),
319 "bif" => Ok(Currency::BIF),
320 "bmd" => Ok(Currency::BMD),
321 "bnd" => Ok(Currency::BND),
322 "bob" => Ok(Currency::BOB),
323 "brl" => Ok(Currency::BRL),
324 "bsd" => Ok(Currency::BSD),
325 "bwp" => Ok(Currency::BWP),
326 "bzd" => Ok(Currency::BZD),
327 "cad" => Ok(Currency::CAD),
328 "cdf" => Ok(Currency::CDF),
329 "chf" => Ok(Currency::CHF),
330 "clp" => Ok(Currency::CLP),
331 "cny" => Ok(Currency::CNY),
332 "cop" => Ok(Currency::COP),
333 "crc" => Ok(Currency::CRC),
334 "cve" => Ok(Currency::CVE),
335 "czk" => Ok(Currency::CZK),
336 "djf" => Ok(Currency::DJF),
337 "dkk" => Ok(Currency::DKK),
338 "dop" => Ok(Currency::DOP),
339 "dzd" => Ok(Currency::DZD),
340 "eek" => Ok(Currency::EEK),
341 "egp" => Ok(Currency::EGP),
342 "etb" => Ok(Currency::ETB),
343 "eur" => Ok(Currency::EUR),
344 "fjd" => Ok(Currency::FJD),
345 "fkp" => Ok(Currency::FKP),
346 "gbp" => Ok(Currency::GBP),
347 "gel" => Ok(Currency::GEL),
348 "gip" => Ok(Currency::GIP),
349 "gmd" => Ok(Currency::GMD),
350 "gnf" => Ok(Currency::GNF),
351 "gtq" => Ok(Currency::GTQ),
352 "gyd" => Ok(Currency::GYD),
353 "hkd" => Ok(Currency::HKD),
354 "hnl" => Ok(Currency::HNL),
355 "hrk" => Ok(Currency::HRK),
356 "htg" => Ok(Currency::HTG),
357 "huf" => Ok(Currency::HUF),
358 "idr" => Ok(Currency::IDR),
359 "ils" => Ok(Currency::ILS),
360 "inr" => Ok(Currency::INR),
361 "isk" => Ok(Currency::ISK),
362 "jmd" => Ok(Currency::JMD),
363 "jpy" => Ok(Currency::JPY),
364 "kes" => Ok(Currency::KES),
365 "kgs" => Ok(Currency::KGS),
366 "khr" => Ok(Currency::KHR),
367 "kmf" => Ok(Currency::KMF),
368 "krw" => Ok(Currency::KRW),
369 "kyd" => Ok(Currency::KYD),
370 "kzt" => Ok(Currency::KZT),
371 "lak" => Ok(Currency::LAK),
372 "lbp" => Ok(Currency::LBP),
373 "lkr" => Ok(Currency::LKR),
374 "lrd" => Ok(Currency::LRD),
375 "lsl" => Ok(Currency::LSL),
376 "ltl" => Ok(Currency::LTL),
377 "lvl" => Ok(Currency::LVL),
378 "mad" => Ok(Currency::MAD),
379 "mdl" => Ok(Currency::MDL),
380 "mga" => Ok(Currency::MGA),
381 "mkd" => Ok(Currency::MKD),
382 "mnt" => Ok(Currency::MNT),
383 "mop" => Ok(Currency::MOP),
384 "mro" => Ok(Currency::MRO),
385 "mur" => Ok(Currency::MUR),
386 "mvr" => Ok(Currency::MVR),
387 "mwk" => Ok(Currency::MWK),
388 "mxn" => Ok(Currency::MXN),
389 "myr" => Ok(Currency::MYR),
390 "mzn" => Ok(Currency::MZN),
391 "nad" => Ok(Currency::NAD),
392 "ngn" => Ok(Currency::NGN),
393 "nio" => Ok(Currency::NIO),
394 "nok" => Ok(Currency::NOK),
395 "npr" => Ok(Currency::NPR),
396 "nzd" => Ok(Currency::NZD),
397 "pab" => Ok(Currency::PAB),
398 "pen" => Ok(Currency::PEN),
399 "pgk" => Ok(Currency::PGK),
400 "php" => Ok(Currency::PHP),
401 "pkr" => Ok(Currency::PKR),
402 "pln" => Ok(Currency::PLN),
403 "pyg" => Ok(Currency::PYG),
404 "qar" => Ok(Currency::QAR),
405 "ron" => Ok(Currency::RON),
406 "rsd" => Ok(Currency::RSD),
407 "rub" => Ok(Currency::RUB),
408 "rwf" => Ok(Currency::RWF),
409 "sar" => Ok(Currency::SAR),
410 "sbd" => Ok(Currency::SBD),
411 "scr" => Ok(Currency::SCR),
412 "sek" => Ok(Currency::SEK),
413 "sgd" => Ok(Currency::SGD),
414 "shp" => Ok(Currency::SHP),
415 "sll" => Ok(Currency::SLL),
416 "sos" => Ok(Currency::SOS),
417 "srd" => Ok(Currency::SRD),
418 "std" => Ok(Currency::STD),
419 "svc" => Ok(Currency::SVC),
420 "szl" => Ok(Currency::SZL),
421 "thb" => Ok(Currency::THB),
422 "tjs" => Ok(Currency::TJS),
423 "top" => Ok(Currency::TOP),
424 "try" => Ok(Currency::TRY),
425 "ttd" => Ok(Currency::TTD),
426 "twd" => Ok(Currency::TWD),
427 "tzs" => Ok(Currency::TZS),
428 "uah" => Ok(Currency::UAH),
429 "ugx" => Ok(Currency::UGX),
430 "usd" => Ok(Currency::USD),
431 "uyu" => Ok(Currency::UYU),
432 "uzs" => Ok(Currency::UZS),
433 "vef" => Ok(Currency::VEF),
434 "vnd" => Ok(Currency::VND),
435 "vuv" => Ok(Currency::VUV),
436 "wst" => Ok(Currency::WST),
437 "xaf" => Ok(Currency::XAF),
438 "xcd" => Ok(Currency::XCD),
439 "xof" => Ok(Currency::XOF),
440 "xpf" => Ok(Currency::XPF),
441 "yer" => Ok(Currency::YER),
442 "zar" => Ok(Currency::ZAR),
443 "zmw" => Ok(Currency::ZMW),
444 _ => Err(ParseCurrencyError(())),
445 }
446 }
447}
448
449#[derive(Debug)]
450pub struct ParseCurrencyError(());
451
452impl std::fmt::Display for ParseCurrencyError {
453 fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
454 #[allow(deprecated)]
455 fmt.write_str(::std::error::Error::description(self))
456 }
457}
458
459impl std::error::Error for ParseCurrencyError {
460 fn description(&self) -> &str {
461 "unknown currency code"
462 }
463}