EdmTypeSemantics   A
last analyzed

Complexity

Total Complexity 33

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Importance

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

1 Method

Rating   Name   Duplication   Size   Complexity  
D getPrimitiveTypeReference() 0 43 33
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
abstract class EdmTypeSemantics
20
{
21
    public static function getPrimitiveTypeReference(IPrimitiveType $type, bool $isNullable): IPrimitiveTypeReference
22
    {
23
        switch ($type->getPrimitiveKind()) {
24
            case PrimitiveTypeKind::Boolean():
25
            case PrimitiveTypeKind::Byte():
26
            case PrimitiveTypeKind::Double():
27
            case PrimitiveTypeKind::Guid():
28
            case PrimitiveTypeKind::Int16():
29
            case PrimitiveTypeKind::Int32():
30
            case PrimitiveTypeKind::Int64():
31
            case PrimitiveTypeKind::SByte():
32
            case PrimitiveTypeKind::Single():
33
            case PrimitiveTypeKind::Stream():
34
                return new EdmPrimitiveTypeReference($type, $isNullable);
35
            case PrimitiveTypeKind::Binary():
36
                return new EdmBinaryTypeReference($type, $isNullable);
37
            case PrimitiveTypeKind::String():
38
                return new EdmStringTypeReference($type, $isNullable);
39
            case PrimitiveTypeKind::Decimal():
40
                return new EdmDecimalTypeReference($type, $isNullable);
41
            case PrimitiveTypeKind::DateTime():
42
            case PrimitiveTypeKind::DateTimeOffset():
43
            case PrimitiveTypeKind::Time():
44
                return new EdmTemporalTypeReference($type, $isNullable);
45
            case PrimitiveTypeKind::Geography():
46
            case PrimitiveTypeKind::GeographyPoint():
47
            case PrimitiveTypeKind::GeographyLineString():
48
            case PrimitiveTypeKind::GeographyPolygon():
49
            case PrimitiveTypeKind::GeographyCollection():
50
            case PrimitiveTypeKind::GeographyMultiPolygon():
51
            case PrimitiveTypeKind::GeographyMultiLineString():
52
            case PrimitiveTypeKind::GeographyMultiPoint():
53
            case PrimitiveTypeKind::Geometry():
54
            case PrimitiveTypeKind::GeometryPoint():
55
            case PrimitiveTypeKind::GeometryLineString():
56
            case PrimitiveTypeKind::GeometryPolygon():
57
            case PrimitiveTypeKind::GeometryCollection():
58
            case PrimitiveTypeKind::GeometryMultiPolygon():
59
            case PrimitiveTypeKind::GeometryMultiLineString():
60
            case PrimitiveTypeKind::GeometryMultiPoint():
61
                return new EdmSpatialTypeReference($type, $isNullable);
62
            default:
63
                throw new InvalidOperationException(StringConst::EdmPrimitive_UnexpectedKind());
64
        }
65
    }
66
}
67