SerializerSymfonyServiceProvider   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 3
eloc 24
c 1
b 0
f 1
dl 0
loc 62
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A registerSerializer() 0 14 1
A createSymfonySerializer() 0 24 1
A register() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Jellyfish\SerializerSymfony;
6
7
use Jellyfish\Serializer\SerializerConstants;
8
use Jellyfish\SerializerSymfony\NameConverter\PropertyNameConverter;
9
use Pimple\Container;
10
use Pimple\ServiceProviderInterface;
11
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
12
use Symfony\Component\Serializer\Encoder\JsonEncoder;
13
use Symfony\Component\Serializer\Encoder\XmlEncoder;
14
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
15
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
16
use Symfony\Component\Serializer\Serializer as SymfonySerializer;
17
use Symfony\Component\Serializer\SerializerInterface as SymfonySerializerInterface;
18
19
class SerializerSymfonyServiceProvider implements ServiceProviderInterface
20
{
21
    /**
22
     * @param \Pimple\Container $pimple
23
     *
24
     * @return void
25
     */
26
    public function register(Container $pimple): void
27
    {
28
        $this->registerSerializer($pimple);
29
    }
30
31
    /**
32
     * @param \Pimple\Container $container
33
     *
34
     * @return \Jellyfish\SerializerSymfony\SerializerSymfonyServiceProvider
35
     */
36
    protected function registerSerializer(Container $container): SerializerSymfonyServiceProvider
37
    {
38
        $self = $this;
39
40
        $container->offsetSet(
41
            SerializerConstants::CONTAINER_KEY_SERIALIZER,
42
            static function (Container $container) use ($self) {
43
                return new Serializer(
44
                    $self->createSymfonySerializer($container)
45
                );
46
            }
47
        );
48
49
        return $this;
50
    }
51
52
    /**
53
     * @param \Pimple\Container $container
54
     *
55
     * @return \Symfony\Component\Serializer\SerializerInterface
56
     */
57
    protected function createSymfonySerializer(Container $container): SymfonySerializerInterface
58
    {
59
        $strategyProvider = $container->offsetGet(
60
            SerializerConstants::CONTAINER_KEY_PROPERTY_NAME_CONVERTER_STRATEGY_PROVIDER
61
        );
62
63
        $normalizer = [
64
            new ObjectNormalizer(
65
                null,
66
                new PropertyNameConverter($strategyProvider),
67
                null,
68
                new PhpDocExtractor()
69
            ),
70
            new ArrayDenormalizer()
71
        ];
72
73
        $encoders = [
74
            new JsonEncoder(),
75
            new XmlEncoder()
76
        ];
77
78
        return new SymfonySerializer(
79
            $normalizer,
80
            $encoders
81
        );
82
    }
83
}
84