Skip to content

Commit

Permalink
fix: deprecations in Elasticsearch normalizer (#5699)
Browse files Browse the repository at this point in the history
  • Loading branch information
dunglas committed Jul 25, 2023
1 parent 368245f commit ca98347
Showing 1 changed file with 36 additions and 6 deletions.
42 changes: 36 additions & 6 deletions src/Elasticsearch/Serializer/DocumentNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@
use Symfony\Component\Serializer\Mapping\ClassDiscriminatorResolverInterface;
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface;
use Symfony\Component\Serializer\NameConverter\NameConverterInterface;
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\SerializerAwareInterface;
use Symfony\Component\Serializer\SerializerInterface;

/**
* Document denormalizer for Elasticsearch.
Expand All @@ -30,21 +34,31 @@
*
* @author Baptiste Meyer <baptiste.meyer@gmail.com>
*/
final class DocumentNormalizer extends ObjectNormalizer // @phpstan-ignore-line
final class DocumentNormalizer implements NormalizerInterface, DenormalizerInterface, SerializerAwareInterface
{
public const FORMAT = 'elasticsearch';

public function __construct(private readonly ResourceMetadataCollectionFactoryInterface $resourceMetadataCollectionFactory, ClassMetadataFactoryInterface $classMetadataFactory = null, NameConverterInterface $nameConverter = null, PropertyAccessorInterface $propertyAccessor = null, PropertyTypeExtractorInterface $propertyTypeExtractor = null, ClassDiscriminatorResolverInterface $classDiscriminatorResolver = null, callable $objectClassResolver = null, array $defaultContext = [])
{
parent::__construct($classMetadataFactory, $nameConverter, $propertyAccessor, $propertyTypeExtractor, $classDiscriminatorResolver, $objectClassResolver, $defaultContext);
private readonly ObjectNormalizer $decoratedNormalizer;

public function __construct(
private readonly ResourceMetadataCollectionFactoryInterface $resourceMetadataCollectionFactory,
ClassMetadataFactoryInterface $classMetadataFactory = null,
private readonly ?NameConverterInterface $nameConverter = null,
PropertyAccessorInterface $propertyAccessor = null,
PropertyTypeExtractorInterface $propertyTypeExtractor = null,
ClassDiscriminatorResolverInterface $classDiscriminatorResolver = null,
callable $objectClassResolver = null,
array $defaultContext = [],
) {
$this->decoratedNormalizer = new ObjectNormalizer($classMetadataFactory, $nameConverter, $propertyAccessor, $propertyTypeExtractor, $classDiscriminatorResolver, $objectClassResolver, $defaultContext);
}

/**
* {@inheritdoc}
*/
public function supportsDenormalization(mixed $data, string $type, string $format = null, array $context = []): bool
{
return self::FORMAT === $format && parent::supportsDenormalization($data, $type, $format, $context); // @phpstan-ignore-line symfony bc-layer
return self::FORMAT === $format && $this->decoratedNormalizer->supportsDenormalization($data, $type, $format, $context); // @phpstan-ignore-line symfony bc-layer
}

/**
Expand All @@ -56,7 +70,7 @@ public function denormalize(mixed $data, string $class, string $format = null, a
$data = $this->populateIdentifier($data, $class)['_source'];
}

return parent::denormalize($data, $class, $format, $context);
return $this->decoratedNormalizer->denormalize($data, $class, $format, $context);
}

/**
Expand Down Expand Up @@ -103,4 +117,20 @@ private function populateIdentifier(array $data, string $class): array

return $data;
}

/**
* {@inheritdoc}
*/
public function setSerializer(SerializerInterface $serializer): void
{
$this->decoratedNormalizer->setSerializer($serializer);
}

/**
* {@inheritdoc}
*/
public function getSupportedTypes(?string $format): array
{
return self::FORMAT === $format ? ['object' => true] : [];
}
}

0 comments on commit ca98347

Please sign in to comment.