Completed
Push — master ( 5c38af...d37987 )
by Markus
48s queued 15s
created

createSerializer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 5
c 1
b 0
f 1
dl 0
loc 11
rs 10
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Jellyfish\SerializerSymfony;
4
5
use Jellyfish\SerializerSymfony\NameConverter\PropertyNameConverter;
6
use Pimple\Container;
7
use Pimple\ServiceProviderInterface;
8
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
9
use Symfony\Component\Serializer\Encoder\JsonEncoder;
10
use Symfony\Component\Serializer\Encoder\XmlEncoder;
11
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
12
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
13
use Symfony\Component\Serializer\Serializer as SymfonySerializer;
14
use Symfony\Component\Serializer\SerializerInterface as SymfonySerializerInterface;
15
16
class SerializerSymfonyServiceProvider implements ServiceProviderInterface
17
{
18
    /**
19
     * @param \Pimple\Container $pimple
20
     *
21
     * @return void
22
     */
23
    public function register(Container $pimple): void
24
    {
25
        $this->registerSerializer($pimple);
26
    }
27
28
    /**
29
     * @param \Pimple\Container $container
30
     *
31
     * @return \Jellyfish\SerializerSymfony\SerializerSymfonyServiceProvider
32
     */
33
    protected function registerSerializer(Container $container): SerializerSymfonyServiceProvider
34
    {
35
        $self = $this;
36
37
        $container->offsetSet('serializer', function (Container $container) use ($self) {
38
            return new Serializer(
39
                $self->createSymfonySerializer($container)
40
            );
41
        });
42
43
        return $this;
44
    }
45
46
    /**
47
     * @return \Symfony\Component\Serializer\SerializerInterface
48
     */
49
    protected function createSymfonySerializer(Container $container): SymfonySerializerInterface
50
    {
51
        $strategryProvider = $container->offsetGet('serializer_property_name_converter_strategy_provider');
52
53
        $normalizer = [
54
            new ObjectNormalizer(
55
                null,
56
                new PropertyNameConverter($strategryProvider),
57
                null,
58
                new PhpDocExtractor()
59
            ),
60
            new ArrayDenormalizer()
61
        ];
62
63
        $encoders = [
64
            new JsonEncoder(),
65
            new XmlEncoder()
66
        ];
67
68
        return new SymfonySerializer(
69
            $normalizer,
70
            $encoders
71
        );
72
    }
73
}
74