Skip to content

Commit 288dc00

Browse files
committed
[JsonStreamer] Merge PropertyMetadata value transformers
1 parent a19a7c2 commit 288dc00

12 files changed

+97
-25
lines changed

UPGRADE-7.4.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,14 @@ HttpKernel
102102
* Deprecate implementing `__sleep/wakeup()` on data collectors; use `__(un)serialize()` instead
103103
* Make `Profile` final and `Profiler::__sleep()` internal
104104

105+
JsonStreamer
106+
------------
107+
108+
* Deprecate `PropertyMetadata::$streamToNativeValueTransformers`, use `PropertyMetadata::$valueTransformers` instead
109+
* Deprecate `PropertyMetadata::getNativeToStreamValueTransformer()` and `PropertyMetadata::getStreamToNativeValueTransformers()`, use `PropertyMetadata::getValueTransformers()` instead
110+
* Deprecate `PropertyMetadata::withNativeToStreamValueTransformers()` and `PropertyMetadata::withStreamToNativeValueTransformers()`, use `PropertyMetadata::withValueTransformers()` instead
111+
* Deprecate `PropertyMetadata::withAdditionalNativeToStreamValueTransformer()` and `PropertyMetadata::withAdditionalStreamToNativeValueTransformer`, use `PropertyMetadata::withAdditionalValueTransformer()` instead
112+
105113
Mime
106114
----
107115

src/Symfony/Component/JsonStreamer/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ CHANGELOG
88
* Remove `nikic/php-parser` dependency
99
* Add `_current_object` to the context passed to value transformers during write operations
1010
* Add `include_null_properties` option to encode the properties with `null` value
11+
* Deprecate `PropertyMetadata::$streamToNativeValueTransformers`, use `PropertyMetadata::$valueTransformers` instead
12+
* Deprecate `PropertyMetadata::getNativeToStreamValueTransformer()` and `PropertyMetadata::getStreamToNativeValueTransformers()`, use `PropertyMetadata::getValueTransformers()` instead
13+
* Deprecate `PropertyMetadata::withNativeToStreamValueTransformers()` and `PropertyMetadata::withStreamToNativeValueTransformers()`, use `PropertyMetadata::withValueTransformers()` instead
14+
* Deprecate `PropertyMetadata::withAdditionalNativeToStreamValueTransformer()` and `PropertyMetadata::withAdditionalStreamToNativeValueTransformer`, use `PropertyMetadata::withAdditionalValueTransformer()` instead
1115

1216
7.3
1317
---

src/Symfony/Component/JsonStreamer/Mapping/PropertyMetadata.php

Lines changed: 70 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,23 @@
2020
*/
2121
final class PropertyMetadata
2222
{
23+
private ?array $streamToNativeValueTransformers;
24+
2325
/**
24-
* @param list<string|\Closure> $nativeToStreamValueTransformers
25-
* @param list<string|\Closure> $streamToNativeValueTransformers
26+
* @param list<string|\Closure> $valueTransformers
27+
* @param list<string|\Closure>|null $streamToNativeValueTransformers
2628
*/
2729
public function __construct(
2830
private string $name,
2931
private Type $type,
30-
private array $nativeToStreamValueTransformers = [],
31-
private array $streamToNativeValueTransformers = [],
32+
private array $valueTransformers = [],
33+
?array $streamToNativeValueTransformers = null,
3234
) {
35+
if (null !== $streamToNativeValueTransformers) {
36+
trigger_deprecation('symfony/json-streamer', '7.4', 'The "streamToNativeValueTransformers" parameter of the "%s()" method is deprecated. Use "valueTransformers" instead.', __METHOD__);
37+
}
38+
39+
$this->streamToNativeValueTransformers = $streamToNativeValueTransformers;
3340
}
3441

3542
public function getName(): string
@@ -39,7 +46,7 @@ public function getName(): string
3946

4047
public function withName(string $name): self
4148
{
42-
return new self($name, $this->type, $this->nativeToStreamValueTransformers, $this->streamToNativeValueTransformers);
49+
return new self($name, $this->type, $this->valueTransformers, $this->streamToNativeValueTransformers);
4350
}
4451

4552
public function getType(): Type
@@ -49,28 +56,67 @@ public function getType(): Type
4956

5057
public function withType(Type $type): self
5158
{
52-
return new self($this->name, $type, $this->nativeToStreamValueTransformers, $this->streamToNativeValueTransformers);
59+
return new self($this->name, $type, $this->valueTransformers, $this->streamToNativeValueTransformers);
60+
}
61+
62+
/**
63+
* @return list<string|\Closure>
64+
*/
65+
public function getValueTransformers(): array
66+
{
67+
return $this->valueTransformers;
68+
}
69+
70+
/**
71+
* @param list<string|\Closure> $valueTransformers
72+
*/
73+
public function withValueTransformers(array $valueTransformers): self
74+
{
75+
return new self($this->name, $this->type, $valueTransformers);
76+
}
77+
78+
public function withAdditionalValueTransformer(string|\Closure $valueTransformer): self
79+
{
80+
$valueTransformers = $this->valueTransformers;
81+
82+
$valueTransformers[] = $valueTransformer;
83+
$valueTransformers = array_values(array_unique($valueTransformers));
84+
85+
return $this->withValueTransformers($valueTransformers);
5386
}
5487

5588
/**
89+
* @deprecated since Symfony 7.4, use "getValueTransformers" instead
90+
*
5691
* @return list<string|\Closure>
5792
*/
5893
public function getNativeToStreamValueTransformer(): array
5994
{
60-
return $this->nativeToStreamValueTransformers;
95+
trigger_deprecation('symfony/json-streamer', '7.4', 'The "%s()" method is deprecated, use "%s::getValueTransformers()" instead.', __METHOD__, self::class);
96+
97+
return $this->valueTransformers;
6198
}
6299

63100
/**
101+
* @deprecated since Symfony 7.4, use "withValueTransformers" instead
102+
*
64103
* @param list<string|\Closure> $nativeToStreamValueTransformers
65104
*/
66105
public function withNativeToStreamValueTransformers(array $nativeToStreamValueTransformers): self
67106
{
107+
trigger_deprecation('symfony/json-streamer', '7.4', 'The "%s()" method is deprecated, use "%s::withValueTransformers()" instead.', __METHOD__, self::class);
108+
68109
return new self($this->name, $this->type, $nativeToStreamValueTransformers, $this->streamToNativeValueTransformers);
69110
}
70111

112+
/**
113+
* @deprecated since Symfony 7.4, use "withAdditionalValueTransformer" instead
114+
*/
71115
public function withAdditionalNativeToStreamValueTransformer(string|\Closure $nativeToStreamValueTransformer): self
72116
{
73-
$nativeToStreamValueTransformers = $this->nativeToStreamValueTransformers;
117+
trigger_deprecation('symfony/json-streamer', '7.4', 'The "%s()" method is deprecated, use "%s::withAdditionalValueTransformer()" instead.', __METHOD__, self::class);
118+
119+
$nativeToStreamValueTransformers = $this->valueTransformers;
74120

75121
$nativeToStreamValueTransformers[] = $nativeToStreamValueTransformer;
76122
$nativeToStreamValueTransformers = array_values(array_unique($nativeToStreamValueTransformers));
@@ -79,24 +125,37 @@ public function withAdditionalNativeToStreamValueTransformer(string|\Closure $na
79125
}
80126

81127
/**
128+
* @deprecated since Symfony 7.4, use "getValueTransformers" instead
129+
*
82130
* @return list<string|\Closure>
83131
*/
84132
public function getStreamToNativeValueTransformers(): array
85133
{
86-
return $this->streamToNativeValueTransformers;
134+
trigger_deprecation('symfony/json-streamer', '7.4', 'The "%s()" method is deprecated, use "%s::getValueTransformers()" instead.', __METHOD__, self::class);
135+
136+
return $this->streamToNativeValueTransformers ?? [];
87137
}
88138

89139
/**
140+
* @deprecated since Symfony 7.4, use "withValueTransformers" instead
141+
*
90142
* @param list<string|\Closure> $streamToNativeValueTransformers
91143
*/
92144
public function withStreamToNativeValueTransformers(array $streamToNativeValueTransformers): self
93145
{
94-
return new self($this->name, $this->type, $this->nativeToStreamValueTransformers, $streamToNativeValueTransformers);
146+
trigger_deprecation('symfony/json-streamer', '7.4', 'The "%s()" method is deprecated, use "%s::withValueTransformers()" instead.', __METHOD__, self::class);
147+
148+
return new self($this->name, $this->type, $this->valueTransformers, $streamToNativeValueTransformers);
95149
}
96150

151+
/**
152+
* @deprecated since Symfony 7.4, use "withAdditionalValueTransformer" instead
153+
*/
97154
public function withAdditionalStreamToNativeValueTransformer(string|\Closure $streamToNativeValueTransformer): self
98155
{
99-
$streamToNativeValueTransformers = $this->streamToNativeValueTransformers;
156+
trigger_deprecation('symfony/json-streamer', '7.4', 'The "%s()" method is deprecated, use "%s::withAdditionalValueTransformer()" instead.', __METHOD__, self::class);
157+
158+
$streamToNativeValueTransformers = $this->streamToNativeValueTransformers ?? [];
100159

101160
$streamToNativeValueTransformers[] = $streamToNativeValueTransformer;
102161
$streamToNativeValueTransformers = array_values(array_unique($streamToNativeValueTransformers));

src/Symfony/Component/JsonStreamer/Mapping/Read/AttributePropertyMetadataLoader.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public function load(string $className, array $options = [], array $context = []
6262

6363
$result[$streamedName] = $initialMetadata
6464
->withType($valueTransformerService::getStreamValueType())
65-
->withAdditionalStreamToNativeValueTransformer($valueTransformer);
65+
->withAdditionalValueTransformer($valueTransformer);
6666

6767
continue;
6868
}
@@ -79,7 +79,7 @@ public function load(string $className, array $options = [], array $context = []
7979

8080
$result[$streamedName] = $initialMetadata
8181
->withType($this->typeResolver->resolve($parameterReflection))
82-
->withAdditionalStreamToNativeValueTransformer($valueTransformer);
82+
->withAdditionalValueTransformer($valueTransformer);
8383
}
8484

8585
return $result;

src/Symfony/Component/JsonStreamer/Mapping/Read/DateTimeTypePropertyMetadataLoader.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public function load(string $className, array $options = [], array $context = []
4444

4545
$metadata = $metadata
4646
->withType(StringToDateTimeValueTransformer::getStreamValueType())
47-
->withAdditionalStreamToNativeValueTransformer('json_streamer.value_transformer.string_to_date_time');
47+
->withAdditionalValueTransformer('json_streamer.value_transformer.string_to_date_time');
4848
}
4949
}
5050

src/Symfony/Component/JsonStreamer/Mapping/Write/AttributePropertyMetadataLoader.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public function load(string $className, array $options = [], array $context = []
6262

6363
$result[$streamedName] = $initialMetadata
6464
->withType($valueTransformerService::getStreamValueType())
65-
->withAdditionalNativeToStreamValueTransformer($valueTransformer);
65+
->withAdditionalValueTransformer($valueTransformer);
6666

6767
continue;
6868
}
@@ -75,7 +75,7 @@ public function load(string $className, array $options = [], array $context = []
7575

7676
$result[$streamedName] = $initialMetadata
7777
->withType($this->typeResolver->resolve($valueTransformerReflection))
78-
->withAdditionalNativeToStreamValueTransformer($valueTransformer);
78+
->withAdditionalValueTransformer($valueTransformer);
7979
}
8080

8181
return $result;

src/Symfony/Component/JsonStreamer/Mapping/Write/DateTimeTypePropertyMetadataLoader.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public function load(string $className, array $options = [], array $context = []
3939
if ($type instanceof ObjectType && is_a($type->getClassName(), \DateTimeInterface::class, true)) {
4040
$metadata = $metadata
4141
->withType(DateTimeToStringValueTransformer::getStreamValueType())
42-
->withAdditionalNativeToStreamValueTransformer('json_streamer.value_transformer.date_time_to_string');
42+
->withAdditionalValueTransformer('json_streamer.value_transformer.date_time_to_string');
4343
}
4444
}
4545

src/Symfony/Component/JsonStreamer/Read/StreamReaderGenerator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ private function createDataModel(Type $type, array $options = [], array $context
131131
'name' => $propertyMetadata->getName(),
132132
'value' => $this->createDataModel($propertyMetadata->getType(), $options, $context),
133133
'accessor' => function (string $accessor) use ($propertyMetadata): string {
134-
foreach ($propertyMetadata->getStreamToNativeValueTransformers() as $valueTransformer) {
134+
foreach ($propertyMetadata->getValueTransformers() as $valueTransformer) {
135135
if (\is_string($valueTransformer)) {
136136
$accessor = "\$valueTransformers->get('$valueTransformer')->transform($accessor, \$options)";
137137

src/Symfony/Component/JsonStreamer/Tests/Mapping/Read/AttributePropertyMetadataLoaderTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ public function testRetrieveValueTransformer()
4242
]), TypeResolver::create());
4343

4444
$this->assertEquals([
45-
'id' => new PropertyMetadata('id', Type::string(), [], [DivideStringAndCastToIntValueTransformer::class]),
46-
'active' => new PropertyMetadata('active', Type::string(), [], [StringToBooleanValueTransformer::class]),
47-
'name' => new PropertyMetadata('name', Type::string(), [], [\Closure::fromCallable('strtoupper')]),
48-
'range' => new PropertyMetadata('range', Type::string(), [], [\Closure::fromCallable(DummyWithValueTransformerAttributes::explodeRange(...))]),
45+
'id' => new PropertyMetadata('id', Type::string(), [DivideStringAndCastToIntValueTransformer::class]),
46+
'active' => new PropertyMetadata('active', Type::string(), [StringToBooleanValueTransformer::class]),
47+
'name' => new PropertyMetadata('name', Type::string(), [\Closure::fromCallable('strtoupper')]),
48+
'range' => new PropertyMetadata('range', Type::string(), [\Closure::fromCallable(DummyWithValueTransformerAttributes::explodeRange(...))]),
4949
], $loader->load(DummyWithValueTransformerAttributes::class));
5050
}
5151

src/Symfony/Component/JsonStreamer/Tests/Mapping/Read/DateTimeTypePropertyMetadataLoaderTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ public function testAddStringToDateTimeValueTransformer()
2929
]));
3030

3131
$this->assertEquals([
32-
'interface' => new PropertyMetadata('interface', Type::string(), [], ['json_streamer.value_transformer.string_to_date_time']),
33-
'immutable' => new PropertyMetadata('immutable', Type::string(), [], ['json_streamer.value_transformer.string_to_date_time']),
32+
'interface' => new PropertyMetadata('interface', Type::string(), ['json_streamer.value_transformer.string_to_date_time']),
33+
'immutable' => new PropertyMetadata('immutable', Type::string(), ['json_streamer.value_transformer.string_to_date_time']),
3434
'other' => new PropertyMetadata('other', Type::object(self::class)),
3535
], $loader->load(self::class));
3636
}

0 commit comments

Comments
 (0)