Completed
Push — master ( cb11f6...01dae9 )
by Nate
02:55
created

DiscriminatorDeserializer::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
ccs 3
cts 3
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
/*
3
 * Copyright (c) Nate Brunette.
4
 * Distributed under the MIT License (http://opensource.org/licenses/MIT)
5
 */
6
7
declare(strict_types=1);
8
9
namespace Tebru\Gson\Internal;
10
11
use Tebru\Gson\Discriminator;
12
use Tebru\Gson\Element\JsonElement;
13
use Tebru\Gson\JsonDeserializationContext;
14
use Tebru\Gson\JsonDeserializer;
15
use Tebru\PhpType\TypeToken;
16
17
/**
18
 * Class DiscriminatorDeserializer
19
 *
20
 * Uses a [@see Discriminator] to provide the target class and delegates deserialization.
21
 *
22
 * @author Nate Brunette <[email protected]>
23
 */
24
final class DiscriminatorDeserializer implements JsonDeserializer
25
{
26
    /**
27
     * @var Discriminator
28
     */
29
    private $discriminator;
30
31
    /**
32
     * Constructor
33
     *
34
     * @param Discriminator $discriminator
35
     */
36 3
    public function __construct(Discriminator $discriminator)
37
    {
38 3
        $this->discriminator = $discriminator;
39 3
    }
40
41
    /**
42
     * Called during deserialization process, passing in the JsonElement for the type.  Use
43
     * the JsonDeserializationContext if you want to delegate deserialization of sub types.
44
     *
45
     * @param JsonElement $jsonElement
46
     * @param TypeToken $type
47
     * @param JsonDeserializationContext $context
48
     * @return mixed
49
     */
50 3
    public function deserialize(JsonElement $jsonElement, TypeToken $type, JsonDeserializationContext $context)
51
    {
52 3
        return $context->deserialize($jsonElement, $this->discriminator->getClass($jsonElement->asJsonObject()));
53
    }
54
}
55