Failed Conditions
Push — master ( 2b713c...735d0a )
by Alex
16s queued 13s
created

PrimitiveTypeHelpers   A

Complexity

Total Complexity 33

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
eloc 42
c 2
b 1
f 0
dl 0
loc 55
rs 9.76
wmc 33

1 Method

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