Skip to content

Commit 4e7d637

Browse files
committed
Add getBackedEnum method to Arr class for enum retrieval with default fallback
1 parent 33a251d commit 4e7d637

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

src/Support/Arr.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,24 @@ public static function getBackedEnumOrNull(
126126
);
127127
}
128128

129+
/**
130+
* @template T of BackedEnum
131+
*
132+
* @param array<array-key, mixed> $array
133+
* @param class-string<T> $enumClass
134+
* @param T $default
135+
*
136+
* @return T
137+
*/
138+
public static function getBackedEnum(
139+
array $array,
140+
string $key,
141+
string $enumClass,
142+
BackedEnum $default
143+
): BackedEnum {
144+
return self::getBackedEnumOrNull($array, $key, $enumClass, $default) ?? $default;
145+
}
146+
129147
/**
130148
* @param array<array-key, mixed> $array
131149
* @param class-string<object> $classString

tests/Unit/Support/ArrTest.php

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,37 @@ public static function get_arr_provider(): array
296296
'enumClass' => YesNoBackedEnum::class,
297297
],
298298
YesNoBackedEnum::YES
299-
]
299+
],
300+
'get backed enum, invalid value' => [
301+
'getBackedEnum',
302+
[
303+
'array' => ['key' => 'invalid'],
304+
'key' => 'key',
305+
'enumClass' => YesNoBackedEnum::class,
306+
'default' => YesNoBackedEnum::NO,
307+
],
308+
YesNoBackedEnum::NO
309+
],
310+
'get backed enum, valid backed enum value' => [
311+
'getBackedEnum',
312+
[
313+
'array' => ['key' => YesNoBackedEnum::YES],
314+
'key' => 'key',
315+
'enumClass' => YesNoBackedEnum::class,
316+
'default' => YesNoBackedEnum::NO,
317+
],
318+
YesNoBackedEnum::YES
319+
],
320+
'get backed enum, valid string value' => [
321+
'getBackedEnum',
322+
[
323+
'array' => ['key' => 'yes'],
324+
'key' => 'key',
325+
'enumClass' => YesNoBackedEnum::class,
326+
'default' => YesNoBackedEnum::NO,
327+
],
328+
YesNoBackedEnum::YES
329+
],
300330
];
301331
}
302332

0 commit comments

Comments
 (0)