Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
405 / 405
100.00% covered (success)
100.00%
5 / 5
CRAP
100.00% covered (success)
100.00%
1 / 1
Country
100.00% covered (success)
100.00%
405 / 405
100.00% covered (success)
100.00%
5 / 5
7
100.00% covered (success)
100.00%
1 / 1
 label
100.00% covered (success)
100.00%
198 / 198
100.00% covered (success)
100.00%
1 / 1
1
 alpha3
100.00% covered (success)
100.00%
198 / 198
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
1<?php
2
3declare(strict_types=1);
4
5namespace DevToolbelt\Enums\Locale;
6
7use DevToolbelt\Enums\EnumInterface;
8
9enum Country: string implements EnumInterface
10{
11    case AF = 'AF';
12    case AL = 'AL';
13    case DZ = 'DZ';
14    case AD = 'AD';
15    case AO = 'AO';
16    case AG = 'AG';
17    case AR = 'AR';
18    case AM = 'AM';
19    case AU = 'AU';
20    case AT = 'AT';
21    case AZ = 'AZ';
22    case BS = 'BS';
23    case BH = 'BH';
24    case BD = 'BD';
25    case BB = 'BB';
26    case BY = 'BY';
27    case BE = 'BE';
28    case BZ = 'BZ';
29    case BJ = 'BJ';
30    case BT = 'BT';
31    case BO = 'BO';
32    case BA = 'BA';
33    case BW = 'BW';
34    case BR = 'BR';
35    case BN = 'BN';
36    case BG = 'BG';
37    case BF = 'BF';
38    case BI = 'BI';
39    case CV = 'CV';
40    case KH = 'KH';
41    case CM = 'CM';
42    case CA = 'CA';
43    case CF = 'CF';
44    case TD = 'TD';
45    case CL = 'CL';
46    case CN = 'CN';
47    case CO = 'CO';
48    case KM = 'KM';
49    case CG = 'CG';
50    case CD = 'CD';
51    case CR = 'CR';
52    case CI = 'CI';
53    case HR = 'HR';
54    case CU = 'CU';
55    case CY = 'CY';
56    case CZ = 'CZ';
57    case DK = 'DK';
58    case DJ = 'DJ';
59    case DM = 'DM';
60    case DO = 'DO';
61    case EC = 'EC';
62    case EG = 'EG';
63    case SV = 'SV';
64    case GQ = 'GQ';
65    case ER = 'ER';
66    case EE = 'EE';
67    case SZ = 'SZ';
68    case ET = 'ET';
69    case FJ = 'FJ';
70    case FI = 'FI';
71    case FR = 'FR';
72    case GA = 'GA';
73    case GM = 'GM';
74    case GE = 'GE';
75    case DE = 'DE';
76    case GH = 'GH';
77    case GR = 'GR';
78    case GD = 'GD';
79    case GT = 'GT';
80    case GN = 'GN';
81    case GW = 'GW';
82    case GY = 'GY';
83    case HT = 'HT';
84    case HN = 'HN';
85    case HU = 'HU';
86    case IS = 'IS';
87    case IN = 'IN';
88    case ID = 'ID';
89    case IR = 'IR';
90    case IQ = 'IQ';
91    case IE = 'IE';
92    case IL = 'IL';
93    case IT = 'IT';
94    case JM = 'JM';
95    case JP = 'JP';
96    case JO = 'JO';
97    case KZ = 'KZ';
98    case KE = 'KE';
99    case KI = 'KI';
100    case KP = 'KP';
101    case KR = 'KR';
102    case KW = 'KW';
103    case KG = 'KG';
104    case LA = 'LA';
105    case LV = 'LV';
106    case LB = 'LB';
107    case LS = 'LS';
108    case LR = 'LR';
109    case LY = 'LY';
110    case LI = 'LI';
111    case LT = 'LT';
112    case LU = 'LU';
113    case MG = 'MG';
114    case MW = 'MW';
115    case MY = 'MY';
116    case MV = 'MV';
117    case ML = 'ML';
118    case MT = 'MT';
119    case MH = 'MH';
120    case MR = 'MR';
121    case MU = 'MU';
122    case MX = 'MX';
123    case FM = 'FM';
124    case MD = 'MD';
125    case MC = 'MC';
126    case MN = 'MN';
127    case ME = 'ME';
128    case MA = 'MA';
129    case MZ = 'MZ';
130    case MM = 'MM';
131    case NA = 'NA';
132    case NR = 'NR';
133    case NP = 'NP';
134    case NL = 'NL';
135    case NZ = 'NZ';
136    case NI = 'NI';
137    case NE = 'NE';
138    case NG = 'NG';
139    case MK = 'MK';
140    case NO = 'NO';
141    case OM = 'OM';
142    case PK = 'PK';
143    case PW = 'PW';
144    case PS = 'PS';
145    case PA = 'PA';
146    case PG = 'PG';
147    case PY = 'PY';
148    case PE = 'PE';
149    case PH = 'PH';
150    case PL = 'PL';
151    case PT = 'PT';
152    case QA = 'QA';
153    case RO = 'RO';
154    case RU = 'RU';
155    case RW = 'RW';
156    case KN = 'KN';
157    case LC = 'LC';
158    case VC = 'VC';
159    case WS = 'WS';
160    case SM = 'SM';
161    case ST = 'ST';
162    case SA = 'SA';
163    case SN = 'SN';
164    case RS = 'RS';
165    case SC = 'SC';
166    case SL = 'SL';
167    case SG = 'SG';
168    case SK = 'SK';
169    case SI = 'SI';
170    case SB = 'SB';
171    case SO = 'SO';
172    case ZA = 'ZA';
173    case SS = 'SS';
174    case ES = 'ES';
175    case LK = 'LK';
176    case SD = 'SD';
177    case SR = 'SR';
178    case SE = 'SE';
179    case CH = 'CH';
180    case SY = 'SY';
181    case TW = 'TW';
182    case TJ = 'TJ';
183    case TZ = 'TZ';
184    case TH = 'TH';
185    case TL = 'TL';
186    case TG = 'TG';
187    case TO = 'TO';
188    case TT = 'TT';
189    case TN = 'TN';
190    case TR = 'TR';
191    case TM = 'TM';
192    case TV = 'TV';
193    case UG = 'UG';
194    case UA = 'UA';
195    case AE = 'AE';
196    case GB = 'GB';
197    case US = 'US';
198    case UY = 'UY';
199    case UZ = 'UZ';
200    case VU = 'VU';
201    case VA = 'VA';
202    case VE = 'VE';
203    case VN = 'VN';
204    case YE = 'YE';
205    case ZM = 'ZM';
206    case ZW = 'ZW';
207
208    public function label(): string
209    {
210        return match ($this) {
211            self::AF => 'Afghanistan',
212            self::AL => 'Albania',
213            self::DZ => 'Algeria',
214            self::AD => 'Andorra',
215            self::AO => 'Angola',
216            self::AG => 'Antigua and Barbuda',
217            self::AR => 'Argentina',
218            self::AM => 'Armenia',
219            self::AU => 'Australia',
220            self::AT => 'Austria',
221            self::AZ => 'Azerbaijan',
222            self::BS => 'Bahamas',
223            self::BH => 'Bahrain',
224            self::BD => 'Bangladesh',
225            self::BB => 'Barbados',
226            self::BY => 'Belarus',
227            self::BE => 'Belgium',
228            self::BZ => 'Belize',
229            self::BJ => 'Benin',
230            self::BT => 'Bhutan',
231            self::BO => 'Bolivia',
232            self::BA => 'Bosnia and Herzegovina',
233            self::BW => 'Botswana',
234            self::BR => 'Brazil',
235            self::BN => 'Brunei',
236            self::BG => 'Bulgaria',
237            self::BF => 'Burkina Faso',
238            self::BI => 'Burundi',
239            self::CV => 'Cabo Verde',
240            self::KH => 'Cambodia',
241            self::CM => 'Cameroon',
242            self::CA => 'Canada',
243            self::CF => 'Central African Republic',
244            self::TD => 'Chad',
245            self::CL => 'Chile',
246            self::CN => 'China',
247            self::CO => 'Colombia',
248            self::KM => 'Comoros',
249            self::CG => 'Congo',
250            self::CD => 'Congo (Democratic Republic)',
251            self::CR => 'Costa Rica',
252            self::CI => "Côte d'Ivoire",
253            self::HR => 'Croatia',
254            self::CU => 'Cuba',
255            self::CY => 'Cyprus',
256            self::CZ => 'Czechia',
257            self::DK => 'Denmark',
258            self::DJ => 'Djibouti',
259            self::DM => 'Dominica',
260            self::DO => 'Dominican Republic',
261            self::EC => 'Ecuador',
262            self::EG => 'Egypt',
263            self::SV => 'El Salvador',
264            self::GQ => 'Equatorial Guinea',
265            self::ER => 'Eritrea',
266            self::EE => 'Estonia',
267            self::SZ => 'Eswatini',
268            self::ET => 'Ethiopia',
269            self::FJ => 'Fiji',
270            self::FI => 'Finland',
271            self::FR => 'France',
272            self::GA => 'Gabon',
273            self::GM => 'Gambia',
274            self::GE => 'Georgia',
275            self::DE => 'Germany',
276            self::GH => 'Ghana',
277            self::GR => 'Greece',
278            self::GD => 'Grenada',
279            self::GT => 'Guatemala',
280            self::GN => 'Guinea',
281            self::GW => 'Guinea-Bissau',
282            self::GY => 'Guyana',
283            self::HT => 'Haiti',
284            self::HN => 'Honduras',
285            self::HU => 'Hungary',
286            self::IS => 'Iceland',
287            self::IN => 'India',
288            self::ID => 'Indonesia',
289            self::IR => 'Iran',
290            self::IQ => 'Iraq',
291            self::IE => 'Ireland',
292            self::IL => 'Israel',
293            self::IT => 'Italy',
294            self::JM => 'Jamaica',
295            self::JP => 'Japan',
296            self::JO => 'Jordan',
297            self::KZ => 'Kazakhstan',
298            self::KE => 'Kenya',
299            self::KI => 'Kiribati',
300            self::KP => 'North Korea',
301            self::KR => 'South Korea',
302            self::KW => 'Kuwait',
303            self::KG => 'Kyrgyzstan',
304            self::LA => 'Laos',
305            self::LV => 'Latvia',
306            self::LB => 'Lebanon',
307            self::LS => 'Lesotho',
308            self::LR => 'Liberia',
309            self::LY => 'Libya',
310            self::LI => 'Liechtenstein',
311            self::LT => 'Lithuania',
312            self::LU => 'Luxembourg',
313            self::MG => 'Madagascar',
314            self::MW => 'Malawi',
315            self::MY => 'Malaysia',
316            self::MV => 'Maldives',
317            self::ML => 'Mali',
318            self::MT => 'Malta',
319            self::MH => 'Marshall Islands',
320            self::MR => 'Mauritania',
321            self::MU => 'Mauritius',
322            self::MX => 'Mexico',
323            self::FM => 'Micronesia',
324            self::MD => 'Moldova',
325            self::MC => 'Monaco',
326            self::MN => 'Mongolia',
327            self::ME => 'Montenegro',
328            self::MA => 'Morocco',
329            self::MZ => 'Mozambique',
330            self::MM => 'Myanmar',
331            self::NA => 'Namibia',
332            self::NR => 'Nauru',
333            self::NP => 'Nepal',
334            self::NL => 'Netherlands',
335            self::NZ => 'New Zealand',
336            self::NI => 'Nicaragua',
337            self::NE => 'Niger',
338            self::NG => 'Nigeria',
339            self::MK => 'North Macedonia',
340            self::NO => 'Norway',
341            self::OM => 'Oman',
342            self::PK => 'Pakistan',
343            self::PW => 'Palau',
344            self::PS => 'Palestine',
345            self::PA => 'Panama',
346            self::PG => 'Papua New Guinea',
347            self::PY => 'Paraguay',
348            self::PE => 'Peru',
349            self::PH => 'Philippines',
350            self::PL => 'Poland',
351            self::PT => 'Portugal',
352            self::QA => 'Qatar',
353            self::RO => 'Romania',
354            self::RU => 'Russia',
355            self::RW => 'Rwanda',
356            self::KN => 'Saint Kitts and Nevis',
357            self::LC => 'Saint Lucia',
358            self::VC => 'Saint Vincent and the Grenadines',
359            self::WS => 'Samoa',
360            self::SM => 'San Marino',
361            self::ST => 'São Tomé and Príncipe',
362            self::SA => 'Saudi Arabia',
363            self::SN => 'Senegal',
364            self::RS => 'Serbia',
365            self::SC => 'Seychelles',
366            self::SL => 'Sierra Leone',
367            self::SG => 'Singapore',
368            self::SK => 'Slovakia',
369            self::SI => 'Slovenia',
370            self::SB => 'Solomon Islands',
371            self::SO => 'Somalia',
372            self::ZA => 'South Africa',
373            self::SS => 'South Sudan',
374            self::ES => 'Spain',
375            self::LK => 'Sri Lanka',
376            self::SD => 'Sudan',
377            self::SR => 'Suriname',
378            self::SE => 'Sweden',
379            self::CH => 'Switzerland',
380            self::SY => 'Syria',
381            self::TW => 'Taiwan',
382            self::TJ => 'Tajikistan',
383            self::TZ => 'Tanzania',
384            self::TH => 'Thailand',
385            self::TL => 'Timor-Leste',
386            self::TG => 'Togo',
387            self::TO => 'Tonga',
388            self::TT => 'Trinidad and Tobago',
389            self::TN => 'Tunisia',
390            self::TR => 'Turkey',
391            self::TM => 'Turkmenistan',
392            self::TV => 'Tuvalu',
393            self::UG => 'Uganda',
394            self::UA => 'Ukraine',
395            self::AE => 'United Arab Emirates',
396            self::GB => 'United Kingdom',
397            self::US => 'United States',
398            self::UY => 'Uruguay',
399            self::UZ => 'Uzbekistan',
400            self::VU => 'Vanuatu',
401            self::VA => 'Vatican City',
402            self::VE => 'Venezuela',
403            self::VN => 'Vietnam',
404            self::YE => 'Yemen',
405            self::ZM => 'Zambia',
406            self::ZW => 'Zimbabwe',
407        };
408    }
409
410    public function alpha3(): string
411    {
412        return match ($this) {
413            self::AF => 'AFG',
414            self::AL => 'ALB',
415            self::DZ => 'DZA',
416            self::AD => 'AND',
417            self::AO => 'AGO',
418            self::AG => 'ATG',
419            self::AR => 'ARG',
420            self::AM => 'ARM',
421            self::AU => 'AUS',
422            self::AT => 'AUT',
423            self::AZ => 'AZE',
424            self::BS => 'BHS',
425            self::BH => 'BHR',
426            self::BD => 'BGD',
427            self::BB => 'BRB',
428            self::BY => 'BLR',
429            self::BE => 'BEL',
430            self::BZ => 'BLZ',
431            self::BJ => 'BEN',
432            self::BT => 'BTN',
433            self::BO => 'BOL',
434            self::BA => 'BIH',
435            self::BW => 'BWA',
436            self::BR => 'BRA',
437            self::BN => 'BRN',
438            self::BG => 'BGR',
439            self::BF => 'BFA',
440            self::BI => 'BDI',
441            self::CV => 'CPV',
442            self::KH => 'KHM',
443            self::CM => 'CMR',
444            self::CA => 'CAN',
445            self::CF => 'CAF',
446            self::TD => 'TCD',
447            self::CL => 'CHL',
448            self::CN => 'CHN',
449            self::CO => 'COL',
450            self::KM => 'COM',
451            self::CG => 'COG',
452            self::CD => 'COD',
453            self::CR => 'CRI',
454            self::CI => 'CIV',
455            self::HR => 'HRV',
456            self::CU => 'CUB',
457            self::CY => 'CYP',
458            self::CZ => 'CZE',
459            self::DK => 'DNK',
460            self::DJ => 'DJI',
461            self::DM => 'DMA',
462            self::DO => 'DOM',
463            self::EC => 'ECU',
464            self::EG => 'EGY',
465            self::SV => 'SLV',
466            self::GQ => 'GNQ',
467            self::ER => 'ERI',
468            self::EE => 'EST',
469            self::SZ => 'SWZ',
470            self::ET => 'ETH',
471            self::FJ => 'FJI',
472            self::FI => 'FIN',
473            self::FR => 'FRA',
474            self::GA => 'GAB',
475            self::GM => 'GMB',
476            self::GE => 'GEO',
477            self::DE => 'DEU',
478            self::GH => 'GHA',
479            self::GR => 'GRC',
480            self::GD => 'GRD',
481            self::GT => 'GTM',
482            self::GN => 'GIN',
483            self::GW => 'GNB',
484            self::GY => 'GUY',
485            self::HT => 'HTI',
486            self::HN => 'HND',
487            self::HU => 'HUN',
488            self::IS => 'ISL',
489            self::IN => 'IND',
490            self::ID => 'IDN',
491            self::IR => 'IRN',
492            self::IQ => 'IRQ',
493            self::IE => 'IRL',
494            self::IL => 'ISR',
495            self::IT => 'ITA',
496            self::JM => 'JAM',
497            self::JP => 'JPN',
498            self::JO => 'JOR',
499            self::KZ => 'KAZ',
500            self::KE => 'KEN',
501            self::KI => 'KIR',
502            self::KP => 'PRK',
503            self::KR => 'KOR',
504            self::KW => 'KWT',
505            self::KG => 'KGZ',
506            self::LA => 'LAO',
507            self::LV => 'LVA',
508            self::LB => 'LBN',
509            self::LS => 'LSO',
510            self::LR => 'LBR',
511            self::LY => 'LBY',
512            self::LI => 'LIE',
513            self::LT => 'LTU',
514            self::LU => 'LUX',
515            self::MG => 'MDG',
516            self::MW => 'MWI',
517            self::MY => 'MYS',
518            self::MV => 'MDV',
519            self::ML => 'MLI',
520            self::MT => 'MLT',
521            self::MH => 'MHL',
522            self::MR => 'MRT',
523            self::MU => 'MUS',
524            self::MX => 'MEX',
525            self::FM => 'FSM',
526            self::MD => 'MDA',
527            self::MC => 'MCO',
528            self::MN => 'MNG',
529            self::ME => 'MNE',
530            self::MA => 'MAR',
531            self::MZ => 'MOZ',
532            self::MM => 'MMR',
533            self::NA => 'NAM',
534            self::NR => 'NRU',
535            self::NP => 'NPL',
536            self::NL => 'NLD',
537            self::NZ => 'NZL',
538            self::NI => 'NIC',
539            self::NE => 'NER',
540            self::NG => 'NGA',
541            self::MK => 'MKD',
542            self::NO => 'NOR',
543            self::OM => 'OMN',
544            self::PK => 'PAK',
545            self::PW => 'PLW',
546            self::PS => 'PSE',
547            self::PA => 'PAN',
548            self::PG => 'PNG',
549            self::PY => 'PRY',
550            self::PE => 'PER',
551            self::PH => 'PHL',
552            self::PL => 'POL',
553            self::PT => 'PRT',
554            self::QA => 'QAT',
555            self::RO => 'ROU',
556            self::RU => 'RUS',
557            self::RW => 'RWA',
558            self::KN => 'KNA',
559            self::LC => 'LCA',
560            self::VC => 'VCT',
561            self::WS => 'WSM',
562            self::SM => 'SMR',
563            self::ST => 'STP',
564            self::SA => 'SAU',
565            self::SN => 'SEN',
566            self::RS => 'SRB',
567            self::SC => 'SYC',
568            self::SL => 'SLE',
569            self::SG => 'SGP',
570            self::SK => 'SVK',
571            self::SI => 'SVN',
572            self::SB => 'SLB',
573            self::SO => 'SOM',
574            self::ZA => 'ZAF',
575            self::SS => 'SSD',
576            self::ES => 'ESP',
577            self::LK => 'LKA',
578            self::SD => 'SDN',
579            self::SR => 'SUR',
580            self::SE => 'SWE',
581            self::CH => 'CHE',
582            self::SY => 'SYR',
583            self::TW => 'TWN',
584            self::TJ => 'TJK',
585            self::TZ => 'TZA',
586            self::TH => 'THA',
587            self::TL => 'TLS',
588            self::TG => 'TGO',
589            self::TO => 'TON',
590            self::TT => 'TTO',
591            self::TN => 'TUN',
592            self::TR => 'TUR',
593            self::TM => 'TKM',
594            self::TV => 'TUV',
595            self::UG => 'UGA',
596            self::UA => 'UKR',
597            self::AE => 'ARE',
598            self::GB => 'GBR',
599            self::US => 'USA',
600            self::UY => 'URY',
601            self::UZ => 'UZB',
602            self::VU => 'VUT',
603            self::VA => 'VAT',
604            self::VE => 'VEN',
605            self::VN => 'VNM',
606            self::YE => 'YEM',
607            self::ZM => 'ZMB',
608            self::ZW => 'ZWE',
609        };
610    }
611
612    /**
613     * @return string[]
614     */
615    public function labelList(): array
616    {
617        return array_map(fn (self $case) => $case->label(), self::cases());
618    }
619
620    /**
621     * @return array<string, string>
622     */
623    public static function toArray(): array
624    {
625        $result = [];
626
627        foreach (self::cases() as $country) {
628            $result[$country->value] = $country->value;
629        }
630
631        return $result;
632    }
633
634    /**
635     * @return array<string, string>
636     */
637    public static function toArrayWithLabels(): array
638    {
639        $result = [];
640
641        foreach (self::cases() as $country) {
642            $result[$country->value] = $country->label();
643        }
644
645        return $result;
646    }
647}