wol-soft/php-json-schema-model-generator

View on GitHub
src/SchemaProcessor/PostProcessor/Templates/Enum.phptpl

Summary

Maintainability
Test Coverage
<?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 %}
}