Passed
Push — master ( 21a5dc...1ca6d2 )
by Nate
40s
created

DefaultClassMetadata::skipSerialize()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
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\AnnotationReader\AbstractAnnotation;
12
use Tebru\AnnotationReader\AnnotationCollection;
13
use Tebru\Gson\ClassMetadata;
14
use Tebru\Gson\Internal\Data\PropertyCollection;
15
use Tebru\Gson\PropertyMetadata;
16
17
/**
18
 * Class DefaultClassMetadata
19
 *
20
 * Represents a class an its annotations
21
 *
22
 * @author Nate Brunette <[email protected]>
23
 */
24
final class DefaultClassMetadata implements ClassMetadata
25
{
26
    /**
27
     * The class name
28
     *
29
     * @var string
30
     */
31
    private $name;
32
33
    /**
34
     * The class annotations
35
     *
36
     * @var AnnotationCollection
37
     */
38
    private $annotations;
39
40
    /**
41
     * @var PropertyCollection
42
     */
43
    private $properties;
44
45
    /**
46
     * @var bool
47
     */
48
    private $skipSerialize = false;
49
50
    /**
51
     * @var bool
52
     */
53
    private $skipDeserialize = false;
54
55
    /**
56
     * Constructor
57
     *
58
     * @param string $name
59
     * @param AnnotationCollection $annotations
60
     * @param PropertyCollection $properties
61
     */
62 9
    public function __construct(string $name, AnnotationCollection $annotations, PropertyCollection $properties)
63
    {
64 9
        $this->name = $name;
65 9
        $this->annotations = $annotations;
66 9
        $this->properties = $properties;
67 9
    }
68
69
    /**
70
     * Get the class name as a string
71
     *
72
     * @return string
73
     */
74 1
    public function getName(): string
75
    {
76 1
        return $this->name;
77
    }
78
79
    /**
80
     * Get all class annotations
81
     *
82
     * @return AnnotationCollection
83
     */
84 4
    public function getAnnotations(): AnnotationCollection
85
    {
86 4
        return $this->annotations;
87
    }
88
89
    /**
90
     * Get a specific annotation by class name, returns null if the annotation
91
     * doesn't exist.
92
     *
93
     * @param string $annotationClass
94
     * @return null|AbstractAnnotation
95
     */
96 5
    public function getAnnotation(string $annotationClass): ?AbstractAnnotation
97
    {
98 5
        return $this->annotations->get($annotationClass);
99
    }
100
101
    /**
102
     * Get the [@see PropertyCollection] for class
103
     *
104
     * @return PropertyCollection
105
     */
106 3
    public function getPropertyCollection(): PropertyCollection
107
    {
108 3
        return $this->properties;
109
    }
110
111
    /**
112
     * Returns an array of [@see PropertyMetadata] objects
113
     *
114
     * @return PropertyMetadata[]
115
     */
116 1
    public function getPropertyMetadata(): array
117
    {
118 1
        return $this->properties->toArray();
119
    }
120
121
    /**
122
     * Get [@see PropertyMetadata] by property name
123
     *
124
     * @param string $propertyName
125
     * @return PropertyMetadata|null
126
     */
127 2
    public function getProperty(string $propertyName): ?PropertyMetadata
128
    {
129 2
        return $this->properties->getByName($propertyName);
130
    }
131
132
    /**
133
     * If the class should be skipped during serialization
134
     *
135
     * @return bool
136
     */
137 3
    public function skipSerialize(): bool
138
    {
139 3
        return $this->skipSerialize;
140
    }
141
142
    /**
143
     * Set if we should skip serialization
144
     *
145
     * @param bool $skipSerialize
146
     */
147 3
    public function setSkipSerialize(bool $skipSerialize): void
148
    {
149 3
        $this->skipSerialize = $skipSerialize;
150 3
    }
151
152
    /**
153
     * If the class should be skipped during deserialization
154
     *
155
     * @return bool
156
     */
157 3
    public function skipDeserialize(): bool
158
    {
159 3
        return $this->skipDeserialize;
160
    }
161
162
    /**
163
     * Set if we should skip deserialization
164
     *
165
     * @param bool $skipDeserialize
166
     */
167 3
    public function setSkipDeserialize(bool $skipDeserialize): void
168
    {
169 3
        $this->skipDeserialize = $skipDeserialize;
170 3
    }
171
}
172