BotApiNormalizer   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 3
eloc 39
c 1
b 0
f 0
dl 0
loc 72
rs 10
ccs 39
cts 39
cp 1

2 Methods

Rating   Name   Duplication   Size   Complexity  
A normalize() 0 35 2
A denormalize() 0 20 1
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\EditMessageMediaNormalizer;
17
use TgBotApi\BotApiBase\Normalizer\EditMessageResponseNormalizer;
18
use TgBotApi\BotApiBase\Normalizer\InputFileNormalizer;
19
use TgBotApi\BotApiBase\Normalizer\InputMediaNormalizer;
20
use TgBotApi\BotApiBase\Normalizer\InvoiceNormalizer;
21
use TgBotApi\BotApiBase\Normalizer\JsonSerializableNormalizer;
22
use TgBotApi\BotApiBase\Normalizer\LegacyObjectNormalizerWrapper;
23
use TgBotApi\BotApiBase\Normalizer\MediaGroupNormalizer;
24
use TgBotApi\BotApiBase\Normalizer\PollNormalizer;
25
use TgBotApi\BotApiBase\Normalizer\SetMyCommandsNormalizer;
26
use TgBotApi\BotApiBase\Normalizer\UserProfilePhotosNormalizer;
27
use TgBotApi\BotApiBase\Normalizer\SetChatMenuButtonNormalizer;
28
29
/**
30
 * Class BotApiNormalizer.
31
 */
32
class BotApiNormalizer implements NormalizerInterface
33
{
34
    /**
35
     * @param $data
36
     * @param $type
37
     *
38
     * @throws ExceptionInterface
39
     *
40
     * @return object|array|bool
41 61
     */
42
    public function denormalize($data, $type)
43 61
    {
44 61
        $normalizer = new ObjectNormalizer(
45 61
            null,
46 61
            new CamelCaseToSnakeCaseNameConverter(),
47 61
            null,
48
            new PhpDocExtractor()
49 61
        );
50 61
        $arrayNormalizer = new ArrayDenormalizer();
51 61
        $dateNormalizer = new DateTimeNormalizer();
52 61
        $serializer = new Serializer([
53 61
            new UserProfilePhotosNormalizer($normalizer, $arrayNormalizer),
54 61
            new EditMessageResponseNormalizer($normalizer, $arrayNormalizer, $dateNormalizer),
55 61
            new DateTimeNormalizer(),
56 61
            $dateNormalizer,
57 61
            $normalizer,
58
            $arrayNormalizer,
59
        ]);
60 61
61
        return $serializer->denormalize($data, $type, null, [DateTimeNormalizer::FORMAT_KEY => 'U']);
62
    }
63
64
    /**
65
     * @param $method
66
     *
67
     * @throws ExceptionInterface
68 120
     */
69
    public function normalize($method): BotApiRequestInterface
70 120
    {
71
        $isLegacy = !\defined(AbstractObjectNormalizer::class . '::SKIP_NULL_VALUES');
72 120
73
        $files = [];
74 120
75 120
        $objectNormalizer = new ObjectNormalizer(null, new CamelCaseToSnakeCaseNameConverter());
76 120
        if ($isLegacy) {
77
            $objectNormalizer = new LegacyObjectNormalizerWrapper($objectNormalizer);
78
        }
79 120
80 120
        $serializer = new Serializer([
81 120
            new PollNormalizer($objectNormalizer),
82 120
            new InvoiceNormalizer($objectNormalizer),
83 120
            new SetMyCommandsNormalizer($objectNormalizer),
84 120
            new InputFileNormalizer($files),
85 120
            new MediaGroupNormalizer(new InputMediaNormalizer($objectNormalizer, $files), $objectNormalizer),
86 120
            new EditMessageMediaNormalizer(new InputMediaNormalizer($objectNormalizer, $files), $objectNormalizer),
87 120
            new JsonSerializableNormalizer($objectNormalizer),
88 120
            new AnswerInlineQueryNormalizer($objectNormalizer),
89 120
            new SetChatMenuButtonNormalizer($objectNormalizer),
90
            new DateTimeNormalizer(),
91
            $objectNormalizer,
92 120
        ]);
93 120
94 120
        $data = $serializer->normalize(
95
            $method,
96 120
            null,
97 120
            [
98
                'skip_null_values' => true,
99
                DateTimeNormalizer::FORMAT_KEY => 'U',
100
            ]
101 120
        );
102
103
        return new BotApiRequest($data, $files);
104
    }
105
}
106