Completed
Push — master ( 5a8248...de4c72 )
by Nikolay
03:57
created

BotApiNormalizer::normalize()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 21
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 14
dl 0
loc 21
ccs 15
cts 15
cp 1
rs 9.7998
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 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\NameConverter\CamelCaseToSnakeCaseNameConverter;
9
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
10
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
11
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
12
use Symfony\Component\Serializer\Serializer;
13
use TgBotApi\BotApiBase\Normalizer\AnswerInlineQueryNormalizer;
14
use TgBotApi\BotApiBase\Normalizer\InputFileNormalizer;
15
use TgBotApi\BotApiBase\Normalizer\InputMediaNormalizer;
16
use TgBotApi\BotApiBase\Normalizer\JsonSerializableNormalizer;
17
use TgBotApi\BotApiBase\Normalizer\MediaGroupNormalizer;
18
use TgBotApi\BotApiBase\Normalizer\UserProfilePhotosNormalizer;
19
20
class BotApiNormalizer implements NormalizerInterface
21
{
22
    /**
23
     * @param $data
24
     * @param $type
25
     *
26
     * @return object|array
27
     */
28 28
    public function denormalize($data, $type)
29
    {
30 28
        $normalizer = new ObjectNormalizer(
31 28
            null,
32 28
            new CamelCaseToSnakeCaseNameConverter(),
33 28
            null,
34 28
            new PhpDocExtractor()
35
        );
36 28
        $arrayNormalizer = new ArrayDenormalizer();
37 28
        $serializer = new Serializer([
38 28
            new UserProfilePhotosNormalizer($normalizer, $arrayNormalizer),
39 28
            new DateTimeNormalizer(),
40 28
            $normalizer,
41 28
            $arrayNormalizer,
42
        ]);
43
44 28
        return $serializer->denormalize($data->result, $type, null, [DateTimeNormalizer::FORMAT_KEY => 'U']);
45
    }
46
47
    /**
48
     * @param $method
49
     *
50
     * @return BotApiRequestInterface
51
     */
52 66
    public function normalize($method): BotApiRequestInterface
53
    {
54 66
        $files = [];
55
56 66
        $objectNormalizer = new ObjectNormalizer(null, new CamelCaseToSnakeCaseNameConverter());
57 66
        $serializer = new Serializer([
58 66
            new InputFileNormalizer($files),
59 66
            new MediaGroupNormalizer(new InputMediaNormalizer($objectNormalizer, $files), $objectNormalizer),
60 66
            new JsonSerializableNormalizer($objectNormalizer),
61 66
            new AnswerInlineQueryNormalizer($objectNormalizer),
62 66
            new DateTimeNormalizer(),
63 66
            $objectNormalizer,
64
        ]);
65
66 66
        $data = $serializer->normalize(
67 66
            $method,
68 66
            null,
69 66
            ['skip_null_values' => true, DateTimeNormalizer::FORMAT_KEY => 'U']
70
        );
71
72 66
        return new BotApiRequest($data, $files);
0 ignored issues
show
Bug introduced by
It seems like $data can also be of type boolean and double and integer and string; however, parameter $data of TgBotApi\BotApiBase\BotApiRequest::__construct() does only seem to accept array, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

72
        return new BotApiRequest(/** @scrutinizer ignore-type */ $data, $files);
Loading history...
73
    }
74
}
75