PrimitiveTypeHelpers::getPrimitiveTypeReference()   D
last analyzed

Complexity

Conditions 33
Paths 33

Size

Total Lines 44
Code Lines 41

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 33
eloc 41
nc 33
nop 1
dl 0
loc 44
rs 4.1666
c 0
b 0
f 0

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace AlgoWeb\ODataMetadata\Helpers;
6
7
use AlgoWeb\ODataMetadata\Enums\PrimitiveTypeKind;
8
use AlgoWeb\ODataMetadata\Exception\InvalidOperationException;
9
use AlgoWeb\ODataMetadata\Interfaces\IPrimitiveType;
10
use AlgoWeb\ODataMetadata\Interfaces\IPrimitiveTypeReference;
11
use AlgoWeb\ODataMetadata\Library\EdmBinaryTypeReference;
12
use AlgoWeb\ODataMetadata\Library\EdmDecimalTypeReference;
13
use AlgoWeb\ODataMetadata\Library\EdmPrimitiveTypeReference;
14
use AlgoWeb\ODataMetadata\Library\EdmSpatialTypeReference;
15
use AlgoWeb\ODataMetadata\Library\EdmStringTypeReference;
16
use AlgoWeb\ODataMetadata\Library\EdmTemporalTypeReference;
17
use AlgoWeb\ODataMetadata\StringConst;
18
19
/**
20
 * Trait PrimitiveTypeHelpers.
21
 * @package AlgoWeb\ODataMetadata\Helpers
22
 */
23
trait PrimitiveTypeHelpers
24
{
25
    public function getPrimitiveTypeReference(bool $isNullable): IPrimitiveTypeReference
26
    {
27
        /** @var IPrimitiveType $this */
28
        switch ($this->getPrimitiveKind()) {
29
            case PrimitiveTypeKind::Boolean():
30
            case PrimitiveTypeKind::Byte():
31
            case PrimitiveTypeKind::Double():
32
            case PrimitiveTypeKind::Guid():
33
            case PrimitiveTypeKind::Int16():
34
            case PrimitiveTypeKind::Int32():
35
            case PrimitiveTypeKind::Int64():
36
            case PrimitiveTypeKind::SByte():
37
            case PrimitiveTypeKind::Single():
38
            case PrimitiveTypeKind::Stream():
39
                return new EdmPrimitiveTypeReference($this, $isNullable);
40
            case PrimitiveTypeKind::Binary():
41
                return new EdmBinaryTypeReference($this, $isNullable);
42
            case PrimitiveTypeKind::String():
43
                return new EdmStringTypeReference($this, $isNullable);
44
            case PrimitiveTypeKind::Decimal():
45
                return new EdmDecimalTypeReference($this, $isNullable);
46
            case PrimitiveTypeKind::DateTime():
47
            case PrimitiveTypeKind::DateTimeOffset():
48
            case PrimitiveTypeKind::Time():
49
                return new EdmTemporalTypeReference($this, $isNullable);
50
            case PrimitiveTypeKind::Geography():
51
            case PrimitiveTypeKind::GeographyPoint():
52
            case PrimitiveTypeKind::GeographyLineString():
53
            case PrimitiveTypeKind::GeographyPolygon():
54
            case PrimitiveTypeKind::GeographyCollection():
55
            case PrimitiveTypeKind::GeographyMultiPoint():
56
            case PrimitiveTypeKind::GeographyMultiLineString():
57
            case PrimitiveTypeKind::GeographyMultiPolygon():
58
            case PrimitiveTypeKind::Geometry():
59
            case PrimitiveTypeKind::GeometryPoint():
60
            case PrimitiveTypeKind::GeometryLineString():
61
            case PrimitiveTypeKind::GeometryPolygon():
62
            case PrimitiveTypeKind::GeometryCollection():
63
            case PrimitiveTypeKind::GeometryMultiPolygon():
64
            case PrimitiveTypeKind::GeometryMultiLineString():
65
            case PrimitiveTypeKind::GeometryMultiPoint():
66
                return new EdmSpatialTypeReference($this, $isNullable);
67
            default:
68
                throw new InvalidOperationException(StringConst::EdmPrimitive_UnexpectedKind());
69
        }
70
    }
71
72
    /**
73
     * Gets the primitive kind of this type.
74
     *
75
     * @return PrimitiveTypeKind
76
     */
77
    abstract public function getPrimitiveKind(): PrimitiveTypeKind;
78
}
79