src/SchemaProcessor/PostProcessor/Templates/Enum.phptpl
<?php
declare(strict_types=1);
namespace {{ namespace }};
{% if not backedType %}
use ValueError;
{% endif %}
enum {{ name }}{% if backedType %}: {{ backedType }}{% endif %} {
{% foreach cases as case, value %}
case {{ case }}{% if backedType %} = {{ value }}{% endif %};
{% endforeach %}
{% if not backedType %}
public static function from(mixed $value): self
{
switch (true) {
{% foreach cases as case, value %}
case $value === {{ value }}: return self::{{ case }};
{% endforeach %}
default: throw new ValueError(
sprintf('Invalid enum value %s for enum %s', var_export($value, true), self::class)
);
}
}
public static function tryFrom(mixed $value): ?self
{
try {
return self::from($value);
} catch (ValueError) {
return null;
}
}
public function value(): mixed
{
switch ($this) {
{% foreach cases as case, value %}
case self::{{ case }}: return {{ value }};
{% endforeach %}
}
}
{% endif %}
}