From bf6655a534a6775d30cafa67bd801276bda1d98d Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 13 Aug 2024 23:45:21 +0200 Subject: =?UTF-8?q?VERSION=200.2=20doctrine=20ORM=20et=20entit=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reflection/EnumReflectionProperty.php | 181 +++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 vendor/doctrine/persistence/src/Persistence/Reflection/EnumReflectionProperty.php (limited to 'vendor/doctrine/persistence/src/Persistence/Reflection/EnumReflectionProperty.php') diff --git a/vendor/doctrine/persistence/src/Persistence/Reflection/EnumReflectionProperty.php b/vendor/doctrine/persistence/src/Persistence/Reflection/EnumReflectionProperty.php new file mode 100644 index 0000000..114b9db --- /dev/null +++ b/vendor/doctrine/persistence/src/Persistence/Reflection/EnumReflectionProperty.php @@ -0,0 +1,181 @@ + */ + private $enumType; + + /** @param class-string $enumType */ + public function __construct(ReflectionProperty $originalReflectionProperty, string $enumType) + { + $this->originalReflectionProperty = $originalReflectionProperty; + $this->enumType = $enumType; + } + + /** + * {@inheritDoc} + * + * @psalm-external-mutation-free + */ + public function getDeclaringClass(): ReflectionClass + { + return $this->originalReflectionProperty->getDeclaringClass(); + } + + /** + * {@inheritDoc} + * + * @psalm-external-mutation-free + */ + public function getName(): string + { + return $this->originalReflectionProperty->getName(); + } + + /** + * {@inheritDoc} + * + * @psalm-external-mutation-free + */ + public function getType(): ?ReflectionType + { + return $this->originalReflectionProperty->getType(); + } + + /** + * {@inheritDoc} + */ + public function getAttributes(?string $name = null, int $flags = 0): array + { + return $this->originalReflectionProperty->getAttributes($name, $flags); + } + + /** + * {@inheritDoc} + * + * Converts enum instance to its value. + * + * @param object|null $object + * + * @return int|string|int[]|string[]|null + */ + #[ReturnTypeWillChange] + public function getValue($object = null) + { + if ($object === null) { + return null; + } + + $enum = $this->originalReflectionProperty->getValue($object); + + if ($enum === null) { + return null; + } + + return $this->fromEnum($enum); + } + + /** + * Converts enum value to enum instance. + * + * @param object $object + * @param mixed $value + */ + public function setValue($object, $value = null): void + { + if ($value !== null) { + $value = $this->toEnum($value); + } + + $this->originalReflectionProperty->setValue($object, $value); + } + + /** + * @param BackedEnum|BackedEnum[] $enum + * + * @return ($enum is BackedEnum ? (string|int) : (string[]|int[])) + */ + private function fromEnum($enum) + { + if (is_array($enum)) { + return array_map(static function (BackedEnum $enum) { + return $enum->value; + }, $enum); + } + + return $enum->value; + } + + /** + * @param int|string|int[]|string[]|BackedEnum|BackedEnum[] $value + * + * @return ($value is int|string|BackedEnum ? BackedEnum : BackedEnum[]) + */ + private function toEnum($value) + { + if ($value instanceof BackedEnum) { + return $value; + } + + if (is_array($value)) { + $v = reset($value); + if ($v instanceof BackedEnum) { + return $value; + } + + return array_map([$this->enumType, 'from'], $value); + } + + return $this->enumType::from($value); + } + + /** + * {@inheritDoc} + * + * @psalm-external-mutation-free + */ + public function getModifiers(): int + { + return $this->originalReflectionProperty->getModifiers(); + } + + /** + * {@inheritDoc} + * + * @psalm-external-mutation-free + */ + public function getDocComment(): string|false + { + return $this->originalReflectionProperty->getDocComment(); + } + + /** + * {@inheritDoc} + * + * @psalm-external-mutation-free + */ + public function isPrivate(): bool + { + return $this->originalReflectionProperty->isPrivate(); + } +} -- cgit v1.2.3