Files
core/hwe/sammo/DTO/Caster/BackedEnumCaster.php
T

27 lines
785 B
PHP

<?php
namespace sammo\DTO\Caster;
use Spatie\DataTransferObject\Caster;
class BackedEnumCaster implements Caster
{
private \ReflectionMethod $backedEnumFrom;
public function __construct(
array $type,
) {
$enumType = $type[0] ?? null;
if(!is_subclass_of($enumType, \BackedEnum::class)){
throw new \Exception('Not BackedEnum: '.$enumType);
}
$reflector = new \ReflectionEnum($enumType);
$this->backedEnumFrom = $reflector->getMethod('from');
}
public function cast(mixed $value): \BackedEnum
{
if(!is_string($value) && !is_int($value)){
throw new \Exception('BackedEnumCaster only accepts string|int');
}
return $this->backedEnumFrom->invoke(null, $value);
}
}