*/ private array $enumToValue = []; /** * @var \UnitEnum[] * @phpstan-var array */ private array $valueToEnum = []; /** * @phpstan-param class-string $class * @phpstan-param \Closure(TEnum) : string $mapper */ public function __construct( private string $class, \Closure $mapper ){ foreach($class::cases() as $case){ $string = $mapper($case); $this->valueToEnum[$string] = $case; $this->enumToValue[spl_object_id($case)] = $string; } } /** * @phpstan-param TEnum $enum */ public function enumToValue(\UnitEnum $enum) : string{ return $this->enumToValue[spl_object_id($enum)]; } public function valueToEnum(string $string) : ?\UnitEnum{ return $this->valueToEnum[$string] ?? throw new BlockStateDeserializeException("No $this->class enum mapping for \"$string\""); } /** * @return \UnitEnum[] * @phpstan-return array */ public function getValueToEnum() : array{ return $this->valueToEnum; } }