Completed
Push — split-exclusion-strategies ( e073a8 )
by Nate
03:36
created

skipDeserializingProperty()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 6
nc 3
nop 1
dl 0
loc 8
rs 10
c 0
b 0
f 0
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\Cacheable;
12
use Tebru\Gson\ClassMetadata;
13
use Tebru\Gson\Exclusion\DeserializationExclusionData;
14
use Tebru\Gson\Exclusion\DeserializationExclusionDataAware;
15
use Tebru\Gson\Exclusion\DeserializationExclusionStrategy;
16
use Tebru\Gson\Exclusion\SerializationExclusionData;
17
use Tebru\Gson\Exclusion\SerializationExclusionDataAware;
18
use Tebru\Gson\Exclusion\SerializationExclusionStrategy;
19
use Tebru\Gson\ExclusionData;
20
use Tebru\Gson\ExclusionStrategy;
21
use Tebru\Gson\PropertyMetadata;
22
23
/**
24
 * Class ExclusionStrategyAdapter
25
 *
26
 * Wraps the legacy [@see ExclusionData] in new interfaces
27
 *
28
 * @author Nate Brunette <[email protected]>
29
 */
30
class ExclusionStrategyAdapter implements
31
    SerializationExclusionStrategy,
32
    DeserializationExclusionStrategy,
33
    SerializationExclusionDataAware,
34
    DeserializationExclusionDataAware
35
{
36
    /**
37
     * @var ExclusionStrategy
38
     */
39
    private $exclusionStrategy;
40
41
    /**
42
     * @var bool
43
     */
44
    private $serialization;
45
46
    /**
47
     * @var bool
48
     */
49
    private $deserialization;
50
51
    /**
52
     * @var SerializationExclusionData
53
     */
54
    private $serializationData;
55
56
    /**
57
     * @var DeserializationExclusionData
58
     */
59
    private $deserializationData;
60
61
    /**
62
     * Constructor
63
     *
64
     * @param ExclusionStrategy $exclusionStrategy
65
     * @param bool $serialization
66
     * @param bool $deserialization
67
     */
68
    public function __construct(ExclusionStrategy $exclusionStrategy, bool $serialization, bool $deserialization)
69
    {
70
        $this->exclusionStrategy = $exclusionStrategy;
71
        $this->serialization = $serialization;
72
        $this->deserialization = $deserialization;
73
    }
74
75
    /**
76
     * Return true if caching should be enabled
77
     *
78
     * @return bool
79
     */
80
    public function shouldCache(): bool
81
    {
82
        return $this->exclusionStrategy instanceof Cacheable && $this->exclusionStrategy->shouldCache();
83
    }
84
85
    /**
86
     * Returns true if the class should be skipped during deserialization
87
     *
88
     * @param ClassMetadata $class
89
     * @return bool
90
     */
91
    public function skipDeserializingClass(ClassMetadata $class): bool
92
    {
93
        return $this->deserialization && $this->deserializationData && $this->exclusionStrategy->shouldSkipClass(
0 ignored issues
show
Deprecated Code introduced by
The function Tebru\Gson\ExclusionStrategy::shouldSkipClass() has been deprecated. ( Ignorable by Annotation )

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

93
        return $this->deserialization && $this->deserializationData && /** @scrutinizer ignore-deprecated */ $this->exclusionStrategy->shouldSkipClass(
Loading history...
94
            $class,
95
            new DefaultExclusionData(
96
                false,
97
                $this->deserializationData->getObjectToReadInto(),
98
                $this->deserializationData->getPayload()
99
            )
100
        );
101
    }
102
103
    /**
104
     * Returns true if the class should be skipped during serialization
105
     *
106
     * @param ClassMetadata $class
107
     * @return bool
108
     */
109
    public function skipSerializingClass(ClassMetadata $class): bool
110
    {
111
        return $this->serialization && $this->serializationData && $this->exclusionStrategy->shouldSkipClass(
0 ignored issues
show
Deprecated Code introduced by
The function Tebru\Gson\ExclusionStrategy::shouldSkipClass() has been deprecated. ( Ignorable by Annotation )

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

111
        return $this->serialization && $this->serializationData && /** @scrutinizer ignore-deprecated */ $this->exclusionStrategy->shouldSkipClass(
Loading history...
112
            $class,
113
            new DefaultExclusionData(true, $this->serializationData->getObjectToSerialize())
114
        );
115
    }
116
117
    /**
118
     * Returns true if the property should be skipped during deserialization
119
     *
120
     * @param PropertyMetadata $property
121
     * @return bool
122
     */
123
    public function skipDeserializingProperty(PropertyMetadata $property): bool
124
    {
125
        return $this->deserialization && $this->deserializationData && $this->exclusionStrategy->shouldSkipProperty(
0 ignored issues
show
Deprecated Code introduced by
The function Tebru\Gson\ExclusionStrategy::shouldSkipProperty() has been deprecated. ( Ignorable by Annotation )

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

125
        return $this->deserialization && $this->deserializationData && /** @scrutinizer ignore-deprecated */ $this->exclusionStrategy->shouldSkipProperty(
Loading history...
126
            $property,
127
            new DefaultExclusionData(
128
                false,
129
                $this->deserializationData->getObjectToReadInto(),
130
                $this->deserializationData->getPayload()
131
            )
132
        );
133
    }
134
135
    /**
136
     * Returns true if the property should be skipped during serialization
137
     *
138
     * @param PropertyMetadata $property
139
     * @return bool
140
     */
141
    public function skipSerializingProperty(PropertyMetadata $property): bool
142
    {
143
        return $this->serialization && $this->serializationData && $this->exclusionStrategy->shouldSkipProperty(
0 ignored issues
show
Deprecated Code introduced by
The function Tebru\Gson\ExclusionStrategy::shouldSkipProperty() has been deprecated. ( Ignorable by Annotation )

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

143
        return $this->serialization && $this->serializationData && /** @scrutinizer ignore-deprecated */ $this->exclusionStrategy->shouldSkipProperty(
Loading history...
144
            $property,
145
            new DefaultExclusionData(false, $this->serializationData->getObjectToSerialize())
146
        );
147
    }
148
149
    /**
150
     * Sets the deserialization exclusion data
151
     *
152
     * @param DeserializationExclusionData $data
153
     * @return void
154
     */
155
    public function setDeserializationExclusionData(DeserializationExclusionData $data): void
156
    {
157
        $this->deserializationData = $data;
158
    }
159
160
    /**
161
     * Sets the serialization exclusion data
162
     *
163
     * @param SerializationExclusionData $data
164
     * @return void
165
     */
166
    public function setSerializationExclusionData(SerializationExclusionData $data): void
167
    {
168
        $this->serializationData = $data;
169
    }
170
}
171