Passed
Push — master ( bd5fab...a6cda5 )
by Nikolay
01:17 queued 11s
created

BotApiNormalizer   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

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

2 Methods

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