Passed
Push — master ( 443fcf...179750 )
by Nikolay
02:29
created

BotApiNormalizer::normalize()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 30
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 2.0005

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 18
c 1
b 0
f 0
dl 0
loc 30
ccs 18
cts 19
cp 0.9474
rs 9.6666
cc 2
nc 2
nop 1
crap 2.0005
1
<?php
2
3
declare(strict_types=1);
4
5
namespace TgBotApi\BotApiBase;
6
7
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
8
use Symfony\Component\Serializer\Exception\ExceptionInterface;
9
use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
10
use Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer;
11
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
12
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
13
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
14
use Symfony\Component\Serializer\Serializer;
15
use TgBotApi\BotApiBase\Normalizer\AnswerInlineQueryNormalizer;
16
use TgBotApi\BotApiBase\Normalizer\EditMessageResponseNormalizer;
17
use TgBotApi\BotApiBase\Normalizer\InputFileNormalizer;
18
use TgBotApi\BotApiBase\Normalizer\InputMediaNormalizer;
19
use TgBotApi\BotApiBase\Normalizer\JsonSerializableNormalizer;
20
use TgBotApi\BotApiBase\Normalizer\LegacyObjectNormalizerWrapper;
21
use TgBotApi\BotApiBase\Normalizer\MediaGroupNormalizer;
22
use TgBotApi\BotApiBase\Normalizer\UserProfilePhotosNormalizer;
23
24
/**
25
 * Class BotApiNormalizer.
26
 */
27
class BotApiNormalizer implements NormalizerInterface
28
{
29
    /**
30
     * @param $data
31
     * @param $type
32
     *
33
     * @throws ExceptionInterface
34
     *
35
     * @return object|array|bool
36
     */
37 144
    public function denormalize($data, $type)
38
    {
39 144
        $normalizer = new ObjectNormalizer(
40 144
            null,
41 144
            new CamelCaseToSnakeCaseNameConverter(),
42 144
            null,
43 144
            new PhpDocExtractor()
44
        );
45 144
        $arrayNormalizer = new ArrayDenormalizer();
46 144
        $dateNormalizer = new DateTimeNormalizer();
47 144
        $serializer = new Serializer([
48 144
            new UserProfilePhotosNormalizer($normalizer, $arrayNormalizer),
49 144
            new EditMessageResponseNormalizer($normalizer, $arrayNormalizer, $dateNormalizer),
50 144
            new DateTimeNormalizer(),
51 144
            $dateNormalizer,
52 144
            $normalizer,
53 144
            $arrayNormalizer,
54
        ]);
55
56 144
        return $serializer->denormalize($data, $type, null, [DateTimeNormalizer::FORMAT_KEY => 'U']);
57
    }
58
59
    /**
60
     * @param $method
61
     *
62
     * @throws ExceptionInterface
63
     */
64 282
    public function normalize($method): BotApiRequestInterface
65
    {
66 282
        $isLegacy = !\defined(AbstractObjectNormalizer::class . '::SKIP_NULL_VALUES');
67
68 282
        $files = [];
69
70 282
        $objectNormalizer = new ObjectNormalizer(null, new CamelCaseToSnakeCaseNameConverter());
71 282
        if ($isLegacy) {
72
            $objectNormalizer = new LegacyObjectNormalizerWrapper($objectNormalizer);
73
        }
74
75 282
        $serializer = new Serializer([
76 282
            new InputFileNormalizer($files),
77 282
            new MediaGroupNormalizer(new InputMediaNormalizer($objectNormalizer, $files), $objectNormalizer),
78 282
            new JsonSerializableNormalizer($objectNormalizer),
79 282
            new AnswerInlineQueryNormalizer($objectNormalizer),
80 282
            new DateTimeNormalizer(),
81 282
            $objectNormalizer,
82
        ]);
83
84 282
        $data = $serializer->normalize(
85 282
            $method,
86 282
            null,
87
            [
88 282
                'skip_null_values' => true,
89 282
                DateTimeNormalizer::FORMAT_KEY => 'U',
90
            ]
91
        );
92
93 282
        return new BotApiRequest($data, $files);
94
    }
95
}
96