Skip to content

Commit 24d593c

Browse files
committed
[JsonStreamer] Merge PropertyMetadata value transformers
1 parent 1b50fec commit 24d593c

12 files changed

+90
-22
lines changed

UPGRADE-7.4.md

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

91+
JsonStreamer
92+
------------
93+
94+
* Deprecate `PropertyMetadata::$streamToNativeValueTransformers`, use `PropertyMetadata::$valueTransformers` instead
95+
* Deprecate `PropertyMetadata::getNativeToStreamValueTransformer()` and `PropertyMetadata::getStreamToNativeValueTransformers()`, use `PropertyMetadata::getValueTransformers()` instead
96+
* Deprecate `PropertyMetadata::withNativeToStreamValueTransformers()` and `PropertyMetadata::withStreamToNativeValueTransformers()`, use `PropertyMetadata::withValueTransformers()` instead
97+
* Deprecate `PropertyMetadata::withAdditionalNativeToStreamValueTransformer()` and `PropertyMetadata::withAdditionalStreamToNativeValueTransformer`, use `PropertyMetadata::withAdditionalValueTransformer()` instead
98+
9199
Mime
92100
----
93101

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: 63 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,18 @@
2121
final class PropertyMetadata
2222
{
2323
/**
24-
* @param list<string|\Closure> $nativeToStreamValueTransformers
24+
* @param list<string|\Closure> $valueTransformers
2525
* @param list<string|\Closure> $streamToNativeValueTransformers
2626
*/
2727
public function __construct(
2828
private string $name,
2929
private Type $type,
30-
private array $nativeToStreamValueTransformers = [],
31-
private array $streamToNativeValueTransformers = [],
30+
private array $valueTransformers = [],
31+
private ?array $streamToNativeValueTransformers = null,
3232
) {
33+
if (null !== $streamToNativeValueTransformers) {
34+
trigger_deprecation('symfony/json-streamer', '7.4', 'The "streamToNativeValueTransformers " parameter of the "%s()" method is deprecated. Use "valueTransformers" instead.', __METHOD__);
35+
}
3336
}
3437

3538
public function getName(): string
@@ -39,7 +42,7 @@ public function getName(): string
3942

4043
public function withName(string $name): self
4144
{
42-
return new self($name, $this->type, $this->nativeToStreamValueTransformers, $this->streamToNativeValueTransformers);
45+
return new self($name, $this->type, $this->valueTransformers, $this->streamToNativeValueTransformers);
4346
}
4447

4548
public function getType(): Type
@@ -49,28 +52,67 @@ public function getType(): Type
4952

5053
public function withType(Type $type): self
5154
{
52-
return new self($this->name, $type, $this->nativeToStreamValueTransformers, $this->streamToNativeValueTransformers);
55+
return new self($this->name, $type, $this->valueTransformers, $this->streamToNativeValueTransformers);
5356
}
5457

5558
/**
5659
* @return list<string|\Closure>
5760
*/
61+
public function getValueTransformers(): array
62+
{
63+
return $this->valueTransformers;
64+
}
65+
66+
/**
67+
* @param list<string|\Closure> $valueTransformers
68+
*/
69+
public function withValueTransformers(array $valueTransformers): self
70+
{
71+
return new self($this->name, $this->type, $valueTransformers);
72+
}
73+
74+
public function withAdditionalValueTransformer(string|\Closure $valueTransformer): self
75+
{
76+
$valueTransformers = $this->valueTransformers;
77+
78+
$valueTransformers[] = $valueTransformer;
79+
$valueTransformers = array_values(array_unique($valueTransformers));
80+
81+
return $this->withValueTransformers($valueTransformers);
82+
}
83+
84+
/**
85+
* @deprecated since Symfony 7.4, use "getValueTransformers" instead
86+
*
87+
* @return list<string|\Closure>
88+
*/
5889
public function getNativeToStreamValueTransformer(): array
5990
{
60-
return $this->nativeToStreamValueTransformers;
91+
trigger_deprecation('symfony/json-streamer', '7.4', 'The "%s()" method is deprecated, use "%s::getValueTransformers()" instead.', __METHOD__, self::class);
92+
93+
return $this->valueTransformers;
6194
}
6295

6396
/**
97+
* @deprecated since Symfony 7.4, use "withValueTransformers" instead
98+
*
6499
* @param list<string|\Closure> $nativeToStreamValueTransformers
65100
*/
66101
public function withNativeToStreamValueTransformers(array $nativeToStreamValueTransformers): self
67102
{
103+
trigger_deprecation('symfony/json-streamer', '7.4', 'The "%s()" method is deprecated, use "%s::withValueTransformers()" instead.', __METHOD__, self::class);
104+
68105
return new self($this->name, $this->type, $nativeToStreamValueTransformers, $this->streamToNativeValueTransformers);
69106
}
70107

108+
/**
109+
* @deprecated since Symfony 7.4, use "withAdditionalValueTransformer" instead
110+
*/
71111
public function withAdditionalNativeToStreamValueTransformer(string|\Closure $nativeToStreamValueTransformer): self
72112
{
73-
$nativeToStreamValueTransformers = $this->nativeToStreamValueTransformers;
113+
trigger_deprecation('symfony/json-streamer', '7.4', 'The "%s()" method is deprecated, use "%s::withAdditionalValueTransformer()" instead.', __METHOD__, self::class);
114+
115+
$nativeToStreamValueTransformers = $this->valueTransformers;
74116

75117
$nativeToStreamValueTransformers[] = $nativeToStreamValueTransformer;
76118
$nativeToStreamValueTransformers = array_values(array_unique($nativeToStreamValueTransformers));
@@ -79,23 +121,36 @@ public function withAdditionalNativeToStreamValueTransformer(string|\Closure $na
79121
}
80122

81123
/**
124+
* @deprecated since Symfony 7.4, use "getValueTransformers" instead
125+
*
82126
* @return list<string|\Closure>
83127
*/
84128
public function getStreamToNativeValueTransformers(): array
85129
{
130+
trigger_deprecation('symfony/json-streamer', '7.4', 'The "%s()" method is deprecated, use "%s::getValueTransformers()" instead.', __METHOD__, self::class);
131+
86132
return $this->streamToNativeValueTransformers;
87133
}
88134

89135
/**
136+
* @deprecated since Symfony 7.4, use "withValueTransformers" instead
137+
*
90138
* @param list<string|\Closure> $streamToNativeValueTransformers
91139
*/
92140
public function withStreamToNativeValueTransformers(array $streamToNativeValueTransformers): self
93141
{
94-
return new self($this->name, $this->type, $this->nativeToStreamValueTransformers, $streamToNativeValueTransformers);
142+
trigger_deprecation('symfony/json-streamer', '7.4', 'The "%s()" method is deprecated, use "%s::withValueTransformers()" instead.', __METHOD__, self::class);
143+
144+
return new self($this->name, $this->type, $this->valueTransformers, $streamToNativeValueTransformers);
95145
}
96146

147+
/**
148+
* @deprecated since Symfony 7.4, use "withAdditionalValueTransformer" instead
149+
*/
97150
public function withAdditionalStreamToNativeValueTransformer(string|\Closure $streamToNativeValueTransformer): self
98151
{
152+
trigger_deprecation('symfony/json-streamer', '7.4', 'The "%s()" method is deprecated, use "%s::withAdditionalValueTransformer()" instead.', __METHOD__, self::class);
153+
99154
$streamToNativeValueTransformers = $this->streamToNativeValueTransformers;
100155

101156
$streamToNativeValueTransformers[] = $streamToNativeValueTransformer;

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)