Completed
Push — master ( fe3dbd...6d023a )
by jean
03:47
created

Serializer   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 51
ccs 21
cts 21
cp 1
rs 10
c 0
b 0
f 0
wmc 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
B getSerializer() 0 19 6
A __construct() 0 4 1
A denormalize() 0 13 3
1
<?php
2
3
namespace Darkilliant\ImportBundle\Serializer;
4
5
use Symfony\Component\Serializer\Serializer as SymfonySerializer;
6
use JMS\Serializer\Serializer as JMSSerializer;
7
8
/**
9
 * @internal
10
 */
11
class Serializer
12
{
13
    /** @var SymfonySerializer */
14
    private $symfonySerializer;
15
16
    /** @var JMSSerializer */
17
    private $jmsSerializer;
18
19 5
    public function __construct(SymfonySerializer $symfonySerializer = null, JMSSerializer $jmsSerializer = null)
20
    {
21 5
        $this->symfonySerializer = $symfonySerializer;
22 5
        $this->jmsSerializer = $jmsSerializer;
23 5
    }
24
25
    /**
26
     * @throws \Exception
27
     */
28 5
    public function denormalize($data, $class, string $selector = 'auto')
29
    {
30 5
        $serializer = $this->getSerializer($selector);
31
32 5
        if (null === $serializer) {
33 2
            throw new \Exception('unknow serializer');
34
        }
35
36 3
        if ($serializer instanceof JMSSerializer) {
37 2
            return $serializer->fromArray($data, $class);
38
        }
39
40 1
        return $serializer->denormalize($data, $class);
41
    }
42
43 5
    private function getSerializer(string $selector)
44
    {
45 5
        if (null === $this->symfonySerializer && null === $this->jmsSerializer) {
46 1
            return null;
47
        }
48
49 4
        if ('auto' === $selector) {
50 1
            return $this->jmsSerializer ?? $this->symfonySerializer;
51
        }
52
53 3
        if ('jms_serializer' === $selector) {
54 1
            return $this->jmsSerializer;
55
        }
56
57 2
        if ('symfony_serializer' === $selector) {
58 1
            return $this->symfonySerializer;
59
        }
60
61 1
        return null;
62
    }
63
}
64