Skip to content

Commit ca98347

Browse files
authored
fix: deprecations in Elasticsearch normalizer (#5699)
1 parent 368245f commit ca98347

File tree

1 file changed

+36
-6
lines changed

1 file changed

+36
-6
lines changed

src/Elasticsearch/Serializer/DocumentNormalizer.php

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@
2121
use Symfony\Component\Serializer\Mapping\ClassDiscriminatorResolverInterface;
2222
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface;
2323
use Symfony\Component\Serializer\NameConverter\NameConverterInterface;
24+
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
25+
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
2426
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
27+
use Symfony\Component\Serializer\SerializerAwareInterface;
28+
use Symfony\Component\Serializer\SerializerInterface;
2529

2630
/**
2731
* Document denormalizer for Elasticsearch.
@@ -30,21 +34,31 @@
3034
*
3135
* @author Baptiste Meyer <[email protected]>
3236
*/
33-
final class DocumentNormalizer extends ObjectNormalizer // @phpstan-ignore-line
37+
final class DocumentNormalizer implements NormalizerInterface, DenormalizerInterface, SerializerAwareInterface
3438
{
3539
public const FORMAT = 'elasticsearch';
3640

37-
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 = [])
38-
{
39-
parent::__construct($classMetadataFactory, $nameConverter, $propertyAccessor, $propertyTypeExtractor, $classDiscriminatorResolver, $objectClassResolver, $defaultContext);
41+
private readonly ObjectNormalizer $decoratedNormalizer;
42+
43+
public function __construct(
44+
private readonly ResourceMetadataCollectionFactoryInterface $resourceMetadataCollectionFactory,
45+
ClassMetadataFactoryInterface $classMetadataFactory = null,
46+
private readonly ?NameConverterInterface $nameConverter = null,
47+
PropertyAccessorInterface $propertyAccessor = null,
48+
PropertyTypeExtractorInterface $propertyTypeExtractor = null,
49+
ClassDiscriminatorResolverInterface $classDiscriminatorResolver = null,
50+
callable $objectClassResolver = null,
51+
array $defaultContext = [],
52+
) {
53+
$this->decoratedNormalizer = new ObjectNormalizer($classMetadataFactory, $nameConverter, $propertyAccessor, $propertyTypeExtractor, $classDiscriminatorResolver, $objectClassResolver, $defaultContext);
4054
}
4155

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

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

59-
return parent::denormalize($data, $class, $format, $context);
73+
return $this->decoratedNormalizer->denormalize($data, $class, $format, $context);
6074
}
6175

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

104118
return $data;
105119
}
120+
121+
/**
122+
* {@inheritdoc}
123+
*/
124+
public function setSerializer(SerializerInterface $serializer): void
125+
{
126+
$this->decoratedNormalizer->setSerializer($serializer);
127+
}
128+
129+
/**
130+
* {@inheritdoc}
131+
*/
132+
public function getSupportedTypes(?string $format): array
133+
{
134+
return self::FORMAT === $format ? ['object' => true] : [];
135+
}
106136
}

0 commit comments

Comments
 (0)