TimezonePhpTypeSchemaResolver::getWeight()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
1
<?php
2
3
/**
4
 * It's free open-source software released under the MIT License.
5
 *
6
 * @author Anatoly Nekhay <[email protected]>
7
 * @copyright Copyright (c) 2018, Anatoly Nekhay
8
 * @license https://github.com/sunrise-php/http-router/blob/master/LICENSE
9
 * @link https://github.com/sunrise-php/http-router
10
 */
11
12
declare(strict_types=1);
13
14
namespace Sunrise\Http\Router\OpenApi\PhpTypeSchemaResolver;
15
16
use DateTimeZone;
17
use Reflector;
18
use Sunrise\Http\Router\OpenApi\Exception\UnsupportedPhpTypeException;
19
use Sunrise\Http\Router\OpenApi\OpenApiPhpTypeSchemaNameResolverInterface;
20
use Sunrise\Http\Router\OpenApi\OpenApiPhpTypeSchemaResolverInterface;
21
use Sunrise\Http\Router\OpenApi\Type;
22
23
/**
24
 * @since 3.0.0
25
 */
26
final class TimezonePhpTypeSchemaResolver implements
27
    OpenApiPhpTypeSchemaResolverInterface,
28
    OpenApiPhpTypeSchemaNameResolverInterface
29
{
30
    /**
31
     * @link https://www.php.net/manual/en/timezones.php
32
     */
33
    private const TIMEZONE_LIST = [
34
        'Africa/Abidjan',
35
        'Africa/Accra',
36
        'Africa/Addis_Ababa',
37
        'Africa/Algiers',
38
        'Africa/Asmara',
39
        'Africa/Bamako',
40
        'Africa/Bangui',
41
        'Africa/Banjul',
42
        'Africa/Bissau',
43
        'Africa/Blantyre',
44
        'Africa/Brazzaville',
45
        'Africa/Bujumbura',
46
        'Africa/Cairo',
47
        'Africa/Casablanca',
48
        'Africa/Ceuta',
49
        'Africa/Conakry',
50
        'Africa/Dakar',
51
        'Africa/Dar_es_Salaam',
52
        'Africa/Djibouti',
53
        'Africa/Douala',
54
        'Africa/El_Aaiun',
55
        'Africa/Freetown',
56
        'Africa/Gaborone',
57
        'Africa/Harare',
58
        'Africa/Johannesburg',
59
        'Africa/Juba',
60
        'Africa/Kampala',
61
        'Africa/Khartoum',
62
        'Africa/Kigali',
63
        'Africa/Kinshasa',
64
        'Africa/Lagos',
65
        'Africa/Libreville',
66
        'Africa/Lome',
67
        'Africa/Luanda',
68
        'Africa/Lubumbashi',
69
        'Africa/Lusaka',
70
        'Africa/Malabo',
71
        'Africa/Maputo',
72
        'Africa/Maseru',
73
        'Africa/Mbabane',
74
        'Africa/Mogadishu',
75
        'Africa/Monrovia',
76
        'Africa/Nairobi',
77
        'Africa/Ndjamena',
78
        'Africa/Niamey',
79
        'Africa/Nouakchott',
80
        'Africa/Ouagadougou',
81
        'Africa/Porto-Novo',
82
        'Africa/Sao_Tome',
83
        'Africa/Tripoli',
84
        'Africa/Tunis',
85
        'Africa/Windhoek',
86
        'America/Adak',
87
        'America/Anchorage',
88
        'America/Anguilla',
89
        'America/Antigua',
90
        'America/Araguaina',
91
        'America/Argentina/Buenos_Aires',
92
        'America/Argentina/Catamarca',
93
        'America/Argentina/Cordoba',
94
        'America/Argentina/Jujuy',
95
        'America/Argentina/La_Rioja',
96
        'America/Argentina/Mendoza',
97
        'America/Argentina/Rio_Gallegos',
98
        'America/Argentina/Salta',
99
        'America/Argentina/San_Juan',
100
        'America/Argentina/San_Luis',
101
        'America/Argentina/Tucuman',
102
        'America/Argentina/Ushuaia',
103
        'America/Aruba',
104
        'America/Asuncion',
105
        'America/Atikokan',
106
        'America/Bahia',
107
        'America/Bahia_Banderas',
108
        'America/Barbados',
109
        'America/Belem',
110
        'America/Belize',
111
        'America/Blanc-Sablon',
112
        'America/Boa_Vista',
113
        'America/Bogota',
114
        'America/Boise',
115
        'America/Cambridge_Bay',
116
        'America/Campo_Grande',
117
        'America/Cancun',
118
        'America/Caracas',
119
        'America/Cayenne',
120
        'America/Cayman',
121
        'America/Chicago',
122
        'America/Chihuahua',
123
        'America/Ciudad_Juarez',
124
        'America/Costa_Rica',
125
        'America/Creston',
126
        'America/Cuiaba',
127
        'America/Curacao',
128
        'America/Danmarkshavn',
129
        'America/Dawson',
130
        'America/Dawson_Creek',
131
        'America/Denver',
132
        'America/Detroit',
133
        'America/Dominica',
134
        'America/Edmonton',
135
        'America/Eirunepe',
136
        'America/El_Salvador',
137
        'America/Fort_Nelson',
138
        'America/Fortaleza',
139
        'America/Glace_Bay',
140
        'America/Goose_Bay',
141
        'America/Grand_Turk',
142
        'America/Grenada',
143
        'America/Guadeloupe',
144
        'America/Guatemala',
145
        'America/Guayaquil',
146
        'America/Guyana',
147
        'America/Halifax',
148
        'America/Havana',
149
        'America/Hermosillo',
150
        'America/Indiana/Indianapolis',
151
        'America/Indiana/Knox',
152
        'America/Indiana/Marengo',
153
        'America/Indiana/Petersburg',
154
        'America/Indiana/Tell_City',
155
        'America/Indiana/Vevay',
156
        'America/Indiana/Vincennes',
157
        'America/Indiana/Winamac',
158
        'America/Inuvik',
159
        'America/Iqaluit',
160
        'America/Jamaica',
161
        'America/Juneau',
162
        'America/Kentucky/Louisville',
163
        'America/Kentucky/Monticello',
164
        'America/Kralendijk',
165
        'America/La_Paz',
166
        'America/Lima',
167
        'America/Los_Angeles',
168
        'America/Lower_Princes',
169
        'America/Maceio',
170
        'America/Managua',
171
        'America/Manaus',
172
        'America/Marigot',
173
        'America/Martinique',
174
        'America/Matamoros',
175
        'America/Mazatlan',
176
        'America/Menominee',
177
        'America/Merida',
178
        'America/Metlakatla',
179
        'America/Mexico_City',
180
        'America/Miquelon',
181
        'America/Moncton',
182
        'America/Monterrey',
183
        'America/Montevideo',
184
        'America/Montserrat',
185
        'America/Nassau',
186
        'America/New_York',
187
        'America/Nome',
188
        'America/Noronha',
189
        'America/North_Dakota/Beulah',
190
        'America/North_Dakota/Center',
191
        'America/North_Dakota/New_Salem',
192
        'America/Nuuk',
193
        'America/Ojinaga',
194
        'America/Panama',
195
        'America/Paramaribo',
196
        'America/Phoenix',
197
        'America/Port-au-Prince',
198
        'America/Port_of_Spain',
199
        'America/Porto_Velho',
200
        'America/Puerto_Rico',
201
        'America/Punta_Arenas',
202
        'America/Rankin_Inlet',
203
        'America/Recife',
204
        'America/Regina',
205
        'America/Resolute',
206
        'America/Rio_Branco',
207
        'America/Santarem',
208
        'America/Santiago',
209
        'America/Santo_Domingo',
210
        'America/Sao_Paulo',
211
        'America/Scoresbysund',
212
        'America/Sitka',
213
        'America/St_Barthelemy',
214
        'America/St_Johns',
215
        'America/St_Kitts',
216
        'America/St_Lucia',
217
        'America/St_Thomas',
218
        'America/St_Vincent',
219
        'America/Swift_Current',
220
        'America/Tegucigalpa',
221
        'America/Thule',
222
        'America/Tijuana',
223
        'America/Toronto',
224
        'America/Tortola',
225
        'America/Vancouver',
226
        'America/Whitehorse',
227
        'America/Winnipeg',
228
        'America/Yakutat',
229
        'Antarctica/Casey',
230
        'Antarctica/Davis',
231
        'Antarctica/DumontDUrville',
232
        'Antarctica/Macquarie',
233
        'Antarctica/Mawson',
234
        'Antarctica/McMurdo',
235
        'Antarctica/Palmer',
236
        'Antarctica/Rothera',
237
        'Antarctica/Syowa',
238
        'Antarctica/Troll',
239
        'Antarctica/Vostok',
240
        'Arctic/Longyearbyen',
241
        'Asia/Aden',
242
        'Asia/Almaty',
243
        'Asia/Amman',
244
        'Asia/Anadyr',
245
        'Asia/Aqtau',
246
        'Asia/Aqtobe',
247
        'Asia/Ashgabat',
248
        'Asia/Atyrau',
249
        'Asia/Baghdad',
250
        'Asia/Bahrain',
251
        'Asia/Baku',
252
        'Asia/Bangkok',
253
        'Asia/Barnaul',
254
        'Asia/Beirut',
255
        'Asia/Bishkek',
256
        'Asia/Brunei',
257
        'Asia/Chita',
258
        'Asia/Colombo',
259
        'Asia/Damascus',
260
        'Asia/Dhaka',
261
        'Asia/Dili',
262
        'Asia/Dubai',
263
        'Asia/Dushanbe',
264
        'Asia/Famagusta',
265
        'Asia/Gaza',
266
        'Asia/Hebron',
267
        'Asia/Ho_Chi_Minh',
268
        'Asia/Hong_Kong',
269
        'Asia/Hovd',
270
        'Asia/Irkutsk',
271
        'Asia/Jakarta',
272
        'Asia/Jayapura',
273
        'Asia/Jerusalem',
274
        'Asia/Kabul',
275
        'Asia/Kamchatka',
276
        'Asia/Karachi',
277
        'Asia/Kathmandu',
278
        'Asia/Khandyga',
279
        'Asia/Kolkata',
280
        'Asia/Krasnoyarsk',
281
        'Asia/Kuala_Lumpur',
282
        'Asia/Kuching',
283
        'Asia/Kuwait',
284
        'Asia/Macau',
285
        'Asia/Magadan',
286
        'Asia/Makassar',
287
        'Asia/Manila',
288
        'Asia/Muscat',
289
        'Asia/Nicosia',
290
        'Asia/Novokuznetsk',
291
        'Asia/Novosibirsk',
292
        'Asia/Omsk',
293
        'Asia/Oral',
294
        'Asia/Phnom_Penh',
295
        'Asia/Pontianak',
296
        'Asia/Pyongyang',
297
        'Asia/Qatar',
298
        'Asia/Qostanay',
299
        'Asia/Qyzylorda',
300
        'Asia/Riyadh',
301
        'Asia/Sakhalin',
302
        'Asia/Samarkand',
303
        'Asia/Seoul',
304
        'Asia/Shanghai',
305
        'Asia/Singapore',
306
        'Asia/Srednekolymsk',
307
        'Asia/Taipei',
308
        'Asia/Tashkent',
309
        'Asia/Tbilisi',
310
        'Asia/Tehran',
311
        'Asia/Thimphu',
312
        'Asia/Tokyo',
313
        'Asia/Tomsk',
314
        'Asia/Ulaanbaatar',
315
        'Asia/Urumqi',
316
        'Asia/Ust-Nera',
317
        'Asia/Vientiane',
318
        'Asia/Vladivostok',
319
        'Asia/Yakutsk',
320
        'Asia/Yangon',
321
        'Asia/Yekaterinburg',
322
        'Asia/Yerevan',
323
        'Atlantic/Azores',
324
        'Atlantic/Bermuda',
325
        'Atlantic/Canary',
326
        'Atlantic/Cape_Verde',
327
        'Atlantic/Faroe',
328
        'Atlantic/Madeira',
329
        'Atlantic/Reykjavik',
330
        'Atlantic/South_Georgia',
331
        'Atlantic/St_Helena',
332
        'Atlantic/Stanley',
333
        'Australia/Adelaide',
334
        'Australia/Brisbane',
335
        'Australia/Broken_Hill',
336
        'Australia/Darwin',
337
        'Australia/Eucla',
338
        'Australia/Hobart',
339
        'Australia/Lindeman',
340
        'Australia/Lord_Howe',
341
        'Australia/Melbourne',
342
        'Australia/Perth',
343
        'Australia/Sydney',
344
        'Europe/Amsterdam',
345
        'Europe/Andorra',
346
        'Europe/Astrakhan',
347
        'Europe/Athens',
348
        'Europe/Belgrade',
349
        'Europe/Berlin',
350
        'Europe/Bratislava',
351
        'Europe/Brussels',
352
        'Europe/Bucharest',
353
        'Europe/Budapest',
354
        'Europe/Busingen',
355
        'Europe/Chisinau',
356
        'Europe/Copenhagen',
357
        'Europe/Dublin',
358
        'Europe/Gibraltar',
359
        'Europe/Guernsey',
360
        'Europe/Helsinki',
361
        'Europe/Isle_of_Man',
362
        'Europe/Istanbul',
363
        'Europe/Jersey',
364
        'Europe/Kaliningrad',
365
        'Europe/Kirov',
366
        'Europe/Kyiv',
367
        'Europe/Lisbon',
368
        'Europe/Ljubljana',
369
        'Europe/London',
370
        'Europe/Luxembourg',
371
        'Europe/Madrid',
372
        'Europe/Malta',
373
        'Europe/Mariehamn',
374
        'Europe/Minsk',
375
        'Europe/Monaco',
376
        'Europe/Moscow',
377
        'Europe/Oslo',
378
        'Europe/Paris',
379
        'Europe/Podgorica',
380
        'Europe/Prague',
381
        'Europe/Riga',
382
        'Europe/Rome',
383
        'Europe/Samara',
384
        'Europe/San_Marino',
385
        'Europe/Sarajevo',
386
        'Europe/Saratov',
387
        'Europe/Simferopol',
388
        'Europe/Skopje',
389
        'Europe/Sofia',
390
        'Europe/Stockholm',
391
        'Europe/Tallinn',
392
        'Europe/Tirane',
393
        'Europe/Ulyanovsk',
394
        'Europe/Vaduz',
395
        'Europe/Vatican',
396
        'Europe/Vienna',
397
        'Europe/Vilnius',
398
        'Europe/Volgograd',
399
        'Europe/Warsaw',
400
        'Europe/Zagreb',
401
        'Europe/Zurich',
402
        'Indian/Antananarivo',
403
        'Indian/Chagos',
404
        'Indian/Christmas',
405
        'Indian/Cocos',
406
        'Indian/Comoro',
407
        'Indian/Kerguelen',
408
        'Indian/Mahe',
409
        'Indian/Maldives',
410
        'Indian/Mauritius',
411
        'Indian/Mayotte',
412
        'Indian/Reunion',
413
        'Pacific/Apia',
414
        'Pacific/Auckland',
415
        'Pacific/Bougainville',
416
        'Pacific/Chatham',
417
        'Pacific/Chuuk',
418
        'Pacific/Easter',
419
        'Pacific/Efate',
420
        'Pacific/Fakaofo',
421
        'Pacific/Fiji',
422
        'Pacific/Funafuti',
423
        'Pacific/Galapagos',
424
        'Pacific/Gambier',
425
        'Pacific/Guadalcanal',
426
        'Pacific/Guam',
427
        'Pacific/Honolulu',
428
        'Pacific/Kanton',
429
        'Pacific/Kiritimati',
430
        'Pacific/Kosrae',
431
        'Pacific/Kwajalein',
432
        'Pacific/Majuro',
433
        'Pacific/Marquesas',
434
        'Pacific/Midway',
435
        'Pacific/Nauru',
436
        'Pacific/Niue',
437
        'Pacific/Norfolk',
438
        'Pacific/Noumea',
439
        'Pacific/Pago_Pago',
440
        'Pacific/Palau',
441
        'Pacific/Pitcairn',
442
        'Pacific/Pohnpei',
443
        'Pacific/Port_Moresby',
444
        'Pacific/Rarotonga',
445
        'Pacific/Saipan',
446
        'Pacific/Tahiti',
447
        'Pacific/Tarawa',
448
        'Pacific/Tongatapu',
449
        'Pacific/Wake',
450
        'Pacific/Wallis',
451
        'UTC',
452
    ];
453
454 3
    public function supportsPhpType(Type $phpType, Reflector $phpTypeHolder): bool
455
    {
456 3
        return $phpType->name === DateTimeZone::class;
457
    }
458
459
    /**
460
     * @inheritDoc
461
     */
462 3
    public function resolvePhpTypeSchema(Type $phpType, Reflector $phpTypeHolder): array
463
    {
464 3
        $this->supportsPhpType($phpType, $phpTypeHolder) or throw new UnsupportedPhpTypeException();
465
466 3
        return [
467 3
            'type' => Type::OAS_TYPE_NAME_STRING,
468 3
            'enum' => self::TIMEZONE_LIST,
469 3
        ];
470
    }
471
472 3
    public function getWeight(): int
473
    {
474 3
        return 0;
475
    }
476
477 3
    public function resolvePhpTypeSchemaName(Type $phpType, Reflector $phpTypeHolder): string
478
    {
479 3
        return DateTimeZone::class;
480
    }
481
}
482