Completed
Pull Request — master (#19)
by Akihito
04:19
created

Normalizer::denormalize()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 8
rs 9.4285
cc 1
eloc 5
nc 1
nop 4
1
<?php
2
namespace Ackintosh\Snidel\Result;
3
4
use Bernard\Normalizer\AbstractAggregateNormalizerAware;
5
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
6
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
7
8
class Normalizer extends AbstractAggregateNormalizerAware implements NormalizerInterface, DenormalizerInterface
9
{
10
    /**
11
     * {@inheritdoc}
12
     */
13
    public function supportsNormalization($data, $format = null)
14
    {
15
        return $data instanceof Result;
16
    }
17
18
    /**
19
     * {@inheritdoc}
20
     */
21
    public function supportsDenormalization($data, $type, $format = null)
22
    {
23
        return $type === 'Ackintosh\Snidel\Result\Result';
24
    }
25
26
    /**
27
     * {@inheritdoc}
28
     */
29
    public function normalize($object, $format = null, array $context = array())
30
    {
31
        $cloned = clone $object;
32
        $serializedTask = $this->aggregate->normalize($cloned->getTask());
33
        $serializedProcess = serialize($cloned->getProcess());
34
        $cloned->setTask(null);
35
        $cloned->setProcess(null);
36
37
        return serialize([
38
            'serializedTask' => $serializedTask,
39
            'serializedProcess' => $serializedProcess,
40
            'result' => $cloned,
41
        ]);
42
    }
43
44
    /**
45
     * {@inheritdoc}
46
     */
47
    public function denormalize($data, $class, $format = null, array $context = array())
48
    {
49
        $unserialized = unserialize($data);
50
        $unserialized['result']->setTask($this->aggregate->denormalize($unserialized['serializedTask'], 'Ackintosh\Snidel\Task\Task'));
51
        $unserialized['result']->setProcess(unserialize($unserialized['serializedProcess']));
52
53
        return $unserialized['result'];
54
    }
55
}
56