SerializationValidator::getSerializationRuleSet()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
cc 1
eloc 1
c 2
b 1
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AlgoWeb\ODataMetadata\Csdl\Internal\Serialization;
6
7
use AlgoWeb\ODataMetadata\Edm\Validation\EdmError;
8
use AlgoWeb\ODataMetadata\Edm\Validation\EdmErrorCode;
9
use AlgoWeb\ODataMetadata\Edm\Validation\EdmValidator;
10
use AlgoWeb\ODataMetadata\Edm\Validation\Internal\ValidationHelper;
11
use AlgoWeb\ODataMetadata\Edm\Validation\ValidationRuleSet;
12
use AlgoWeb\ODataMetadata\Interfaces\IModel;
13
14
abstract class SerializationValidator
15
{
16
    private static function getSerializationRuleSet(): ValidationRuleSet
17
    {
18
        return new ValidationRuleSet([]);
19
    }
20
21
    /**
22
     * @param  IModel               $root
23
     * @throws \ReflectionException
24
     * @return array
25
     */
26
    public static function getSerializationErrors(IModel $root): array
27
    {
28
        $errors = [];
29
        EdmValidator::validate($root, self::getSerializationRuleSet(), $errors);
30
        $errors = array_filter($errors, [self::class, 'significantToSerialization']);
31
        return $errors;
32
    }
33
34
    /**
35
     * @param  EdmError $error
36
     * @return bool
37
     */
38
    private static function significantToSerialization(EdmError $error)
39
    {
40
        if (ValidationHelper::isInterfaceCritical($error)) {
41
            return true;
42
        }
43
44
        switch ($error->getErrorCode()) {
45
            case EdmErrorCode::InvalidName():
46
            case EdmErrorCode::NameTooLong():
47
            case EdmErrorCode::InvalidNamespaceName():
48
            case EdmErrorCode::SystemNamespaceEncountered():
49
            case EdmErrorCode::RowTypeMustNotHaveBaseType():
50
            case EdmErrorCode::ReferencedTypeMustHaveValidName():
51
            case EdmErrorCode::FunctionImportEntitySetExpressionIsInvalid():
52
            case EdmErrorCode::FunctionImportParameterIncorrectType():
53
            case EdmErrorCode::OnlyInputParametersAllowedInFunctions():
54
            case EdmErrorCode::InvalidFunctionImportParameterMode():
55
            case EdmErrorCode::TypeMustNotHaveKindOfNone():
56
            case EdmErrorCode::PrimitiveTypeMustNotHaveKindOfNone():
57
            case EdmErrorCode::PropertyMustNotHaveKindOfNone():
58
            case EdmErrorCode::TermMustNotHaveKindOfNone():
59
            case EdmErrorCode::SchemaElementMustNotHaveKindOfNone():
60
            case EdmErrorCode::EntityContainerElementMustNotHaveKindOfNone():
61
            case EdmErrorCode::BinaryValueCannotHaveEmptyValue():
62
            case EdmErrorCode::EnumMustHaveIntegerUnderlyingType():
63
            case EdmErrorCode::EnumMemberTypeMustMatchEnumUnderlyingType():
64
                return true;
65
        }
66
67
        return false;
68
    }
69
}
70