*/ class IntFromRawStateMap implements StateMap{ /** * @var int[] * @phpstan-var array */ private array $deserializeMap; /** * Constructs a bidirectional mapping, given a mapping of internal values -> serialized values, and an optional set * of aliases per internal value (used for deserializing invalid serialized values). * * @param (int|string)[] $serializeMap * @param (int|int[])|(string|string[]) $deserializeAliases * * @phpstan-param array $serializeMap * @phpstan-param array> $deserializeAliases */ public function __construct( private array $serializeMap, array $deserializeAliases = [] ){ $this->deserializeMap = array_flip($this->serializeMap); foreach($deserializeAliases as $pmValue => $mcValues){ if(!is_array($mcValues)){ $this->deserializeMap[$mcValues] = $pmValue; }else{ foreach($mcValues as $mcValue){ $this->deserializeMap[$mcValue] = $pmValue; } } } } /** * @param int[] $serializeMap * @param (int|int[]) $deserializeAliases * * @phpstan-param array $serializeMap * @phpstan-param array> $deserializeAliases * * @phpstan-return self */ public static function int(array $serializeMap, array $deserializeAliases = []) : self{ return new self($serializeMap, $deserializeAliases); } /** * @param string[] $serializeMap * @param (string|string[]) $deserializeAliases * * @phpstan-param array $serializeMap * @phpstan-param array> $deserializeAliases * * @phpstan-return self */ public static function string(array $serializeMap, array $deserializeAliases = []) : self{ return new self($serializeMap, $deserializeAliases); } public function getRawToValueMap() : array{ return $this->deserializeMap; } public function valueToRaw(mixed $value) : int|string{ return $this->serializeMap[$value]; } public function rawToValue(int|string $raw) : mixed{ return $this->deserializeMap[$raw] ?? null; } public function printableValue(mixed $value) : string{ return "$value"; } }