8000 [Serializer] Fine-tune `ContextBuilder::withContext()` · symfony/symfony@15e7c5f · GitHub
[go: up one dir, main page]

Skip to content

Commit 15e7c5f

Browse files
committed
[Serializer] Fine-tune ContextBuilder::withContext()
1 parent 84d35a2 commit 15e7c5f

16 files changed

+68
-16
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Serializer\Context;
13+
14+
/**
15+
* Common interface for context builders.
16+
*
17+
* @author Mathias Arlaud <mathias.arlaud@gmail.com>
18+
* @author Robin Chalas <robin.chalas@gmail.com>
19+
*/
20+
interface ContextBuilderInterface
21+
{
22+
/**
23+
* @param self|array<string, mixed> $context
24+
*/
25+
public function withContext(self|array $context): static;
26+
27+
/**
28+
* @return array<string, mixed>
29+
*/
30+
public function toArray(): array;
31+
}

src/Symfony/Component/Serializer/Context/ContextBuilderTrait.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,14 @@ protected function with(string $key, mixed $value): static
3030
}
3131

3232
/**
33-
* @param array<string, mixed> $context
33+
* @param ContextBuilderInterface|array<string, mixed> $context
3434
*/
35-
public function withContext(array $context): static
35+
public function withContext(ContextBuilderInterface|array $context): static
3636
{
37+
if ($context instanceof ContextBuilderInterface) {
38+
$context = $context->toArray();
39+
}
40+
3741
$instance = new static();
3842
$instance->context = array_merge($this->context, $context);
3943

src/Symfony/Component/Serializer/Context/Encoder/CsvEncoderContextBuilder.php

Lines changed: 2 additions & 1 deletion
use Symfony\Component\Serializer\Exception\InvalidArgumentException;
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\Serializer\Context\Encoder;
1313

14+
use Symfony\Component\Serializer\Context\ContextBuilderInterface;
1415
use Symfony\Component\Serializer\Context\ContextBuilderTrait;
1516
use Symfony\Component\Serializer\Encoder\CsvEncoder;
1617
@@ -20,7 +21,7 @@
2021
*
2122
* @author Mathias Arlaud <mathias.arlaud@gmail.com>
2223
*/
23-
final class CsvEncoderContextBuilder
24+
final class CsvEncoderContextBuilder implements ContextBuilderInterface
2425
{
2526
use ContextBuilderTrait;
2627

src/Symfony/Component/Serializer/Context/Encoder/JsonEncoderContextBuilder.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\Serializer\Context\Encoder;
1313

14+
use Symfony\Component\Serializer\Context\ContextBuilderInterface;
1415
use Symfony\Component\Serializer\Context\ContextBuilderTrait;
1516
use Symfony\Component\Serializer\Encoder\JsonDecode;
1617
use Symfony\Component\Serializer\Encoder\JsonEncode;
@@ -20,7 +21,7 @@
2021
*
2122
* @author Mathias Arlaud <mathias.arlaud@gmail.com>
2223
*/
23-
final class JsonEncoderContextBuilder
24+
final class JsonEncoderContextBuilder implements ContextBuilderInterface
2425
{
2526
use ContextBuilderTrait;
2627

src/Symfony/Component/Serializer/Context/Encoder/XmlEncoderContextBuilder.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\Serializer\Context\Encoder;
1313

14+
use Symfony\Component\Serializer\Context\ContextBuilderInterface;
1415
use Symfony\Component\Serializer\Context\ContextBuilderTrait;
1516
use Symfony\Component\Serializer\Encoder\XmlEncoder;
1617

@@ -19,7 +20,7 @@
1920
*
2021
* @author Mathias Arlaud <mathias.arlaud@gmail.com>
2122
*/
22-
final class XmlEncoderContextBuilder
23+
final class XmlEncoderContextBuilder implements ContextBuilderInterface
2324
{
2425
use ContextBuilderTrait;
2526

src/Symfony/Component/Serializer/Context/Encoder/YamlEncoderContextBuilder.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\Serializer\Context\Encoder;
1313

14+
use Symfony\Component\Serializer\Context\ContextBuilderInterface;
1415
use Symfony\Component\Serializer\Context\ContextBuilderTrait;
1516
use Symfony\Component\Serializer\Encoder\YamlEncoder;
1617

@@ -19,7 +20,7 @@
1920
*
2021
* @author Mathias Arlaud <mathias.arlaud@gmail.com>
2122
*/
22-
final class YamlEncoderContextBuilder
23+
final class YamlEncoderContextBuilder implements ContextBuilderInterface
2324
{
2425
use ContextBuilderTrait;
2526

src/Symfony/Component/Serializer/Context/Normalizer/AbstractNormalizerContextBuilder.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\Serializer\Context\Normalizer;
1313

14+
use Symfony\Component\Serializer\Context\ContextBuilderInterface;
1415
use Symfony\Component\Serializer\Context\ContextBuilderTrait;
1516
use Symfony\Component\Serializer\Exception\InvalidArgumentException;
1617
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
@@ -20,7 +21,7 @@
2021
*
2122
* @author Mathias Arlaud <mathias.arlaud@gmail.com>
2223
*/
23-
abstract class AbstractNormalizerContextBuilder
24+
abstract class AbstractNormalizerContextBuilder implements ContextBuilderInterface
2425
{
2526
use ContextBuilderTrait;
2627

src/Symfony/Component/Serializer/Context/Normalizer/ConstraintViolationListNormalizerContextBuilder.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\Serializer\Context\Normalizer;
1313

14+
use Symfony\Component\Serializer\Context\ContextBuilderInterface;
1415
use Symfony\Component\Serializer\Context\ContextBuilderTrait;
1516
use Symfony\Component\Serializer\Normalizer\ConstraintViolationListNormalizer;
1617

@@ -19,7 +20,7 @@
1920
*
2021
* @author Mathias Arlaud <mathias.arlaud@gmail.com>
2122
*/
22-
final class ConstraintViolationListNormalizerContextBuilder
23+
final class ConstraintViolationListNormalizerContextBuilder implements ContextBuilderInterface
2324
{
2425
use ContextBuilderTrait;
2526

src/Symfony/Component/Serializer/Context/Normalizer/DateIntervalNormalizerContextBuilder.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\Serializer\Context\Normalizer;
1313

14+
use Symfony\Component\Serializer\Context\ContextBuilderInterface;
1415
use Symfony\Component\Serializer\Context\ContextBuilderTrait;
1516
use Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer;
1617

@@ -19,7 +20,7 @@
1920
*
2021
* @author Mathias Arlaud <mathias.arlaud@gmail.com>
2122
*/
22-
final class DateIntervalNormalizerContextBuilder
23+
final class DateIntervalNormalizerContextBuilder implements ContextBuilderInterface
2324
{
2425
use ContextBuilderTrait;
2526

src/Symfony/Component/Serializer/Context/Normalizer/DateTimeNormalizerContextBuilder.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\Serializer\Context\Normalizer;
1313

14+
use Symfony\Component\Serializer\Context\ContextBuilderInterface;
1415
use Symfony\Component\Serializer\Context\ContextBuilderTrait;
1516
use Symfony\Component\Serializer\Exception\InvalidArgumentException;
1617
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
@@ -20,7 +21,7 @@
2021
*
2122
* @author Mathias Arlaud <mathias.arlaud@gmail.com>
2223
*/
23-
final class DateTimeNormalizerContextBuilder
24+
final class DateTimeNormalizerContextBuilder implements ContextBuilderInterface
2425
{
2526
use ContextBuilderTrait;
2627

0 commit comments

Comments
 (0)
0