Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
336 / 336
100.00% covered (success)
100.00%
7 / 7
CRAP
100.00% covered (success)
100.00%
1 / 1
Currency
100.00% covered (success)
100.00%
336 / 336
100.00% covered (success)
100.00%
7 / 7
10
100.00% covered (success)
100.00%
1 / 1
 label
100.00% covered (success)
100.00%
158 / 158
100.00% covered (success)
100.00%
1 / 1
1
 symbol
100.00% covered (success)
100.00%
158 / 158
100.00% covered (success)
100.00%
1 / 1
1
 decimalPlaces
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
1
 labelList
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 toArray
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 toArrayWithLabels
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 toArrayWithSymbols
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace DevToolbelt\Enums\Locale;
6
7use DevToolbelt\Enums\EnumInterface;
8
9enum Currency: string implements EnumInterface
10{
11    case AED = 'AED';
12    case AFN = 'AFN';
13    case ALL = 'ALL';
14    case AMD = 'AMD';
15    case ANG = 'ANG';
16    case AOA = 'AOA';
17    case ARS = 'ARS';
18    case AUD = 'AUD';
19    case AWG = 'AWG';
20    case AZN = 'AZN';
21    case BAM = 'BAM';
22    case BBD = 'BBD';
23    case BDT = 'BDT';
24    case BGN = 'BGN';
25    case BHD = 'BHD';
26    case BIF = 'BIF';
27    case BMD = 'BMD';
28    case BND = 'BND';
29    case BOB = 'BOB';
30    case BRL = 'BRL';
31    case BSD = 'BSD';
32    case BTN = 'BTN';
33    case BWP = 'BWP';
34    case BYN = 'BYN';
35    case BZD = 'BZD';
36    case CAD = 'CAD';
37    case CDF = 'CDF';
38    case CHF = 'CHF';
39    case CLP = 'CLP';
40    case CNY = 'CNY';
41    case COP = 'COP';
42    case CRC = 'CRC';
43    case CUP = 'CUP';
44    case CVE = 'CVE';
45    case CZK = 'CZK';
46    case DJF = 'DJF';
47    case DKK = 'DKK';
48    case DOP = 'DOP';
49    case DZD = 'DZD';
50    case EGP = 'EGP';
51    case ERN = 'ERN';
52    case ETB = 'ETB';
53    case EUR = 'EUR';
54    case FJD = 'FJD';
55    case FKP = 'FKP';
56    case GBP = 'GBP';
57    case GEL = 'GEL';
58    case GHS = 'GHS';
59    case GIP = 'GIP';
60    case GMD = 'GMD';
61    case GNF = 'GNF';
62    case GTQ = 'GTQ';
63    case GYD = 'GYD';
64    case HKD = 'HKD';
65    case HNL = 'HNL';
66    case HRK = 'HRK';
67    case HTG = 'HTG';
68    case HUF = 'HUF';
69    case IDR = 'IDR';
70    case ILS = 'ILS';
71    case INR = 'INR';
72    case IQD = 'IQD';
73    case IRR = 'IRR';
74    case ISK = 'ISK';
75    case JMD = 'JMD';
76    case JOD = 'JOD';
77    case JPY = 'JPY';
78    case KES = 'KES';
79    case KGS = 'KGS';
80    case KHR = 'KHR';
81    case KMF = 'KMF';
82    case KPW = 'KPW';
83    case KRW = 'KRW';
84    case KWD = 'KWD';
85    case KYD = 'KYD';
86    case KZT = 'KZT';
87    case LAK = 'LAK';
88    case LBP = 'LBP';
89    case LKR = 'LKR';
90    case LRD = 'LRD';
91    case LSL = 'LSL';
92    case LYD = 'LYD';
93    case MAD = 'MAD';
94    case MDL = 'MDL';
95    case MGA = 'MGA';
96    case MKD = 'MKD';
97    case MMK = 'MMK';
98    case MNT = 'MNT';
99    case MOP = 'MOP';
100    case MRU = 'MRU';
101    case MUR = 'MUR';
102    case MVR = 'MVR';
103    case MWK = 'MWK';
104    case MXN = 'MXN';
105    case MYR = 'MYR';
106    case MZN = 'MZN';
107    case NAD = 'NAD';
108    case NGN = 'NGN';
109    case NIO = 'NIO';
110    case NOK = 'NOK';
111    case NPR = 'NPR';
112    case NZD = 'NZD';
113    case OMR = 'OMR';
114    case PAB = 'PAB';
115    case PEN = 'PEN';
116    case PGK = 'PGK';
117    case PHP = 'PHP';
118    case PKR = 'PKR';
119    case PLN = 'PLN';
120    case PYG = 'PYG';
121    case QAR = 'QAR';
122    case RON = 'RON';
123    case RSD = 'RSD';
124    case RUB = 'RUB';
125    case RWF = 'RWF';
126    case SAR = 'SAR';
127    case SBD = 'SBD';
128    case SCR = 'SCR';
129    case SDG = 'SDG';
130    case SEK = 'SEK';
131    case SGD = 'SGD';
132    case SHP = 'SHP';
133    case SLE = 'SLE';
134    case SOS = 'SOS';
135    case SRD = 'SRD';
136    case SSP = 'SSP';
137    case STN = 'STN';
138    case SVC = 'SVC';
139    case SYP = 'SYP';
140    case SZL = 'SZL';
141    case THB = 'THB';
142    case TJS = 'TJS';
143    case TMT = 'TMT';
144    case TND = 'TND';
145    case TOP = 'TOP';
146    case TRY = 'TRY';
147    case TTD = 'TTD';
148    case TWD = 'TWD';
149    case TZS = 'TZS';
150    case UAH = 'UAH';
151    case UGX = 'UGX';
152    case USD = 'USD';
153    case UYU = 'UYU';
154    case UZS = 'UZS';
155    case VES = 'VES';
156    case VND = 'VND';
157    case VUV = 'VUV';
158    case WST = 'WST';
159    case XAF = 'XAF';
160    case XCD = 'XCD';
161    case XOF = 'XOF';
162    case XPF = 'XPF';
163    case YER = 'YER';
164    case ZAR = 'ZAR';
165    case ZMW = 'ZMW';
166    case ZWL = 'ZWL';
167
168    public function label(): string
169    {
170        return match ($this) {
171            self::AED => 'United Arab Emirates Dirham',
172            self::AFN => 'Afghan Afghani',
173            self::ALL => 'Albanian Lek',
174            self::AMD => 'Armenian Dram',
175            self::ANG => 'Netherlands Antillean Guilder',
176            self::AOA => 'Angolan Kwanza',
177            self::ARS => 'Argentine Peso',
178            self::AUD => 'Australian Dollar',
179            self::AWG => 'Aruban Florin',
180            self::AZN => 'Azerbaijani Manat',
181            self::BAM => 'Bosnia-Herzegovina Convertible Mark',
182            self::BBD => 'Barbadian Dollar',
183            self::BDT => 'Bangladeshi Taka',
184            self::BGN => 'Bulgarian Lev',
185            self::BHD => 'Bahraini Dinar',
186            self::BIF => 'Burundian Franc',
187            self::BMD => 'Bermudan Dollar',
188            self::BND => 'Brunei Dollar',
189            self::BOB => 'Bolivian Boliviano',
190            self::BRL => 'Brazilian Real',
191            self::BSD => 'Bahamian Dollar',
192            self::BTN => 'Bhutanese Ngultrum',
193            self::BWP => 'Botswanan Pula',
194            self::BYN => 'Belarusian Ruble',
195            self::BZD => 'Belize Dollar',
196            self::CAD => 'Canadian Dollar',
197            self::CDF => 'Congolese Franc',
198            self::CHF => 'Swiss Franc',
199            self::CLP => 'Chilean Peso',
200            self::CNY => 'Chinese Yuan',
201            self::COP => 'Colombian Peso',
202            self::CRC => 'Costa Rican Colón',
203            self::CUP => 'Cuban Peso',
204            self::CVE => 'Cape Verdean Escudo',
205            self::CZK => 'Czech Koruna',
206            self::DJF => 'Djiboutian Franc',
207            self::DKK => 'Danish Krone',
208            self::DOP => 'Dominican Peso',
209            self::DZD => 'Algerian Dinar',
210            self::EGP => 'Egyptian Pound',
211            self::ERN => 'Eritrean Nakfa',
212            self::ETB => 'Ethiopian Birr',
213            self::EUR => 'Euro',
214            self::FJD => 'Fijian Dollar',
215            self::FKP => 'Falkland Islands Pound',
216            self::GBP => 'British Pound',
217            self::GEL => 'Georgian Lari',
218            self::GHS => 'Ghanaian Cedi',
219            self::GIP => 'Gibraltar Pound',
220            self::GMD => 'Gambian Dalasi',
221            self::GNF => 'Guinean Franc',
222            self::GTQ => 'Guatemalan Quetzal',
223            self::GYD => 'Guyanaese Dollar',
224            self::HKD => 'Hong Kong Dollar',
225            self::HNL => 'Honduran Lempira',
226            self::HRK => 'Croatian Kuna',
227            self::HTG => 'Haitian Gourde',
228            self::HUF => 'Hungarian Forint',
229            self::IDR => 'Indonesian Rupiah',
230            self::ILS => 'Israeli New Shekel',
231            self::INR => 'Indian Rupee',
232            self::IQD => 'Iraqi Dinar',
233            self::IRR => 'Iranian Rial',
234            self::ISK => 'Icelandic Króna',
235            self::JMD => 'Jamaican Dollar',
236            self::JOD => 'Jordanian Dinar',
237            self::JPY => 'Japanese Yen',
238            self::KES => 'Kenyan Shilling',
239            self::KGS => 'Kyrgystani Som',
240            self::KHR => 'Cambodian Riel',
241            self::KMF => 'Comorian Franc',
242            self::KPW => 'North Korean Won',
243            self::KRW => 'South Korean Won',
244            self::KWD => 'Kuwaiti Dinar',
245            self::KYD => 'Cayman Islands Dollar',
246            self::KZT => 'Kazakhstani Tenge',
247            self::LAK => 'Laotian Kip',
248            self::LBP => 'Lebanese Pound',
249            self::LKR => 'Sri Lankan Rupee',
250            self::LRD => 'Liberian Dollar',
251            self::LSL => 'Lesotho Loti',
252            self::LYD => 'Libyan Dinar',
253            self::MAD => 'Moroccan Dirham',
254            self::MDL => 'Moldovan Leu',
255            self::MGA => 'Malagasy Ariary',
256            self::MKD => 'Macedonian Denar',
257            self::MMK => 'Myanma Kyat',
258            self::MNT => 'Mongolian Tugrik',
259            self::MOP => 'Macanese Pataca',
260            self::MRU => 'Mauritanian Ouguiya',
261            self::MUR => 'Mauritian Rupee',
262            self::MVR => 'Maldivian Rufiyaa',
263            self::MWK => 'Malawian Kwacha',
264            self::MXN => 'Mexican Peso',
265            self::MYR => 'Malaysian Ringgit',
266            self::MZN => 'Mozambican Metical',
267            self::NAD => 'Namibian Dollar',
268            self::NGN => 'Nigerian Naira',
269            self::NIO => 'Nicaraguan Córdoba',
270            self::NOK => 'Norwegian Krone',
271            self::NPR => 'Nepalese Rupee',
272            self::NZD => 'New Zealand Dollar',
273            self::OMR => 'Omani Rial',
274            self::PAB => 'Panamanian Balboa',
275            self::PEN => 'Peruvian Sol',
276            self::PGK => 'Papua New Guinean Kina',
277            self::PHP => 'Philippine Peso',
278            self::PKR => 'Pakistani Rupee',
279            self::PLN => 'Polish Zloty',
280            self::PYG => 'Paraguayan Guarani',
281            self::QAR => 'Qatari Rial',
282            self::RON => 'Romanian Leu',
283            self::RSD => 'Serbian Dinar',
284            self::RUB => 'Russian Ruble',
285            self::RWF => 'Rwandan Franc',
286            self::SAR => 'Saudi Riyal',
287            self::SBD => 'Solomon Islands Dollar',
288            self::SCR => 'Seychellois Rupee',
289            self::SDG => 'Sudanese Pound',
290            self::SEK => 'Swedish Krona',
291            self::SGD => 'Singapore Dollar',
292            self::SHP => 'Saint Helena Pound',
293            self::SLE => 'Sierra Leonean Leone',
294            self::SOS => 'Somali Shilling',
295            self::SRD => 'Surinamese Dollar',
296            self::SSP => 'South Sudanese Pound',
297            self::STN => 'São Tomé and Príncipe Dobra',
298            self::SVC => 'Salvadoran Colón',
299            self::SYP => 'Syrian Pound',
300            self::SZL => 'Swazi Lilangeni',
301            self::THB => 'Thai Baht',
302            self::TJS => 'Tajikistani Somoni',
303            self::TMT => 'Turkmenistani Manat',
304            self::TND => 'Tunisian Dinar',
305            self::TOP => 'Tongan Paʻanga',
306            self::TRY => 'Turkish Lira',
307            self::TTD => 'Trinidad and Tobago Dollar',
308            self::TWD => 'New Taiwan Dollar',
309            self::TZS => 'Tanzanian Shilling',
310            self::UAH => 'Ukrainian Hryvnia',
311            self::UGX => 'Ugandan Shilling',
312            self::USD => 'United States Dollar',
313            self::UYU => 'Uruguayan Peso',
314            self::UZS => 'Uzbekistan Som',
315            self::VES => 'Venezuelan Bolívar',
316            self::VND => 'Vietnamese Dong',
317            self::VUV => 'Vanuatu Vatu',
318            self::WST => 'Samoan Tala',
319            self::XAF => 'CFA Franc BEAC',
320            self::XCD => 'East Caribbean Dollar',
321            self::XOF => 'CFA Franc BCEAO',
322            self::XPF => 'CFP Franc',
323            self::YER => 'Yemeni Rial',
324            self::ZAR => 'South African Rand',
325            self::ZMW => 'Zambian Kwacha',
326            self::ZWL => 'Zimbabwean Dollar',
327        };
328    }
329
330    public function symbol(): string
331    {
332        return match ($this) {
333            self::AED => 'د.إ',
334            self::AFN => '؋',
335            self::ALL => 'L',
336            self::AMD => '֏',
337            self::ANG => 'ƒ',
338            self::AOA => 'Kz',
339            self::ARS => '$',
340            self::AUD => 'A$',
341            self::AWG => 'ƒ',
342            self::AZN => '₼',
343            self::BAM => 'KM',
344            self::BBD => 'Bds$',
345            self::BDT => '৳',
346            self::BGN => 'лв',
347            self::BHD => '.د.ب',
348            self::BIF => 'FBu',
349            self::BMD => '$',
350            self::BND => 'B$',
351            self::BOB => 'Bs.',
352            self::BRL => 'R$',
353            self::BSD => 'B$',
354            self::BTN => 'Nu.',
355            self::BWP => 'P',
356            self::BYN => 'Br',
357            self::BZD => 'BZ$',
358            self::CAD => 'C$',
359            self::CDF => 'FC',
360            self::CHF => 'CHF',
361            self::CLP => '$',
362            self::CNY => '¥',
363            self::COP => '$',
364            self::CRC => '₡',
365            self::CUP => '₱',
366            self::CVE => '$',
367            self::CZK => 'Kč',
368            self::DJF => 'Fdj',
369            self::DKK => 'kr',
370            self::DOP => 'RD$',
371            self::DZD => 'د.ج',
372            self::EGP => 'E£',
373            self::ERN => 'Nfk',
374            self::ETB => 'Br',
375            self::EUR => '€',
376            self::FJD => 'FJ$',
377            self::FKP => '£',
378            self::GBP => '£',
379            self::GEL => '₾',
380            self::GHS => 'GH₵',
381            self::GIP => '£',
382            self::GMD => 'D',
383            self::GNF => 'FG',
384            self::GTQ => 'Q',
385            self::GYD => 'G$',
386            self::HKD => 'HK$',
387            self::HNL => 'L',
388            self::HRK => 'kn',
389            self::HTG => 'G',
390            self::HUF => 'Ft',
391            self::IDR => 'Rp',
392            self::ILS => '₪',
393            self::INR => '₹',
394            self::IQD => 'ع.د',
395            self::IRR => '﷼',
396            self::ISK => 'kr',
397            self::JMD => 'J$',
398            self::JOD => 'د.ا',
399            self::JPY => '¥',
400            self::KES => 'KSh',
401            self::KGS => 'лв',
402            self::KHR => '៛',
403            self::KMF => 'CF',
404            self::KPW => '₩',
405            self::KRW => '₩',
406            self::KWD => 'د.ك',
407            self::KYD => 'CI$',
408            self::KZT => '₸',
409            self::LAK => '₭',
410            self::LBP => 'ل.ل',
411            self::LKR => 'Rs',
412            self::LRD => 'L$',
413            self::LSL => 'M',
414            self::LYD => 'ل.د',
415            self::MAD => 'د.م.',
416            self::MDL => 'L',
417            self::MGA => 'Ar',
418            self::MKD => 'ден',
419            self::MMK => 'K',
420            self::MNT => '₮',
421            self::MOP => 'MOP$',
422            self::MRU => 'UM',
423            self::MUR => '₨',
424            self::MVR => 'Rf',
425            self::MWK => 'MK',
426            self::MXN => '$',
427            self::MYR => 'RM',
428            self::MZN => 'MT',
429            self::NAD => 'N$',
430            self::NGN => '₦',
431            self::NIO => 'C$',
432            self::NOK => 'kr',
433            self::NPR => '₨',
434            self::NZD => 'NZ$',
435            self::OMR => 'ر.ع.',
436            self::PAB => 'B/.',
437            self::PEN => 'S/',
438            self::PGK => 'K',
439            self::PHP => '₱',
440            self::PKR => '₨',
441            self::PLN => 'zł',
442            self::PYG => '₲',
443            self::QAR => 'ر.ق',
444            self::RON => 'lei',
445            self::RSD => 'дин.',
446            self::RUB => '₽',
447            self::RWF => 'FRw',
448            self::SAR => 'ر.س',
449            self::SBD => 'SI$',
450            self::SCR => '₨',
451            self::SDG => 'ج.س.',
452            self::SEK => 'kr',
453            self::SGD => 'S$',
454            self::SHP => '£',
455            self::SLE => 'Le',
456            self::SOS => 'S',
457            self::SRD => '$',
458            self::SSP => '£',
459            self::STN => 'Db',
460            self::SVC => '$',
461            self::SYP => '£S',
462            self::SZL => 'E',
463            self::THB => '฿',
464            self::TJS => 'SM',
465            self::TMT => 'T',
466            self::TND => 'د.ت',
467            self::TOP => 'T$',
468            self::TRY => '₺',
469            self::TTD => 'TT$',
470            self::TWD => 'NT$',
471            self::TZS => 'TSh',
472            self::UAH => '₴',
473            self::UGX => 'USh',
474            self::USD => '$',
475            self::UYU => '$U',
476            self::UZS => 'лв',
477            self::VES => 'Bs.',
478            self::VND => '₫',
479            self::VUV => 'VT',
480            self::WST => 'WS$',
481            self::XAF => 'FCFA',
482            self::XCD => 'EC$',
483            self::XOF => 'CFA',
484            self::XPF => '₣',
485            self::YER => '﷼',
486            self::ZAR => 'R',
487            self::ZMW => 'ZK',
488            self::ZWL => 'Z$',
489        };
490    }
491
492    public function decimalPlaces(): int
493    {
494        return match ($this) {
495            self::BHD, self::IQD, self::JOD, self::KWD, self::LYD, self::OMR, self::TND => 3,
496            self::BIF, self::CLP, self::DJF, self::GNF, self::ISK, self::JPY, self::KMF,
497            self::KRW, self::PYG, self::RWF, self::UGX, self::VND, self::VUV, self::XAF,
498            self::XOF, self::XPF => 0,
499            default => 2,
500        };
501    }
502
503    /**
504     * @return string[]
505     */
506    public function labelList(): array
507    {
508        return array_map(fn (self $case) => $case->label(), self::cases());
509    }
510
511    /**
512     * @return array<string, string>
513     */
514    public static function toArray(): array
515    {
516        $result = [];
517
518        foreach (self::cases() as $currency) {
519            $result[$currency->value] = $currency->value;
520        }
521
522        return $result;
523    }
524
525    /**
526     * @return array<string, string>
527     */
528    public static function toArrayWithLabels(): array
529    {
530        $result = [];
531
532        foreach (self::cases() as $currency) {
533            $result[$currency->value] = $currency->label();
534        }
535
536        return $result;
537    }
538
539    /**
540     * @return array<string, string>
541     */
542    public static function toArrayWithSymbols(): array
543    {
544        $result = [];
545
546        foreach (self::cases() as $currency) {
547            $result[$currency->value] = $currency->symbol();
548        }
549
550        return $result;
551    }
552}