Passed
Push — master ( 781af3...1b1236 )
by Nikolay
54s queued 11s
created

BotApiNormalizer   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Test Coverage

Coverage 97.22%

Importance

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

2 Methods

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