GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( 49f653...3b7ec1 )
by SignpostMarv
05:43
created

JsonTypeUtilities::DaftJsonFromJsonType()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 15
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 5
nc 2
nop 4
dl 0
loc 15
ccs 6
cts 6
cp 1
crap 2
rs 9.4285
c 0
b 0
f 0
1
<?php
2
/**
3
* @author SignpostMarv
4
*/
5
declare(strict_types=1);
6
7
namespace SignpostMarv\DaftObject;
8
9
use Closure;
10
11
class JsonTypeUtilities
12
{
13 164
    public static function ThrowIfNotDaftJson(string $class) : void
14
    {
15 164
        if (false === is_a($class, DaftJson::class, true)) {
16 128
            throw new DaftObjectNotDaftJsonBadMethodCallException($class);
17
        }
18 36
    }
19
20 10
    public static function ThrowIfNotJsonType(string $jsonType) : void
21
    {
22 10
        if (false === is_a($jsonType, DaftJson::class, true)) {
23 2
            throw new ClassDoesNotImplementClassException($jsonType, DaftJson::class);
24
        }
25 8
    }
26
27 22
    public static function MakeMapperThrowIfJsonDefNotValid(
28
        string $class,
29
        array $jsonDef,
30
        array $array
31
    ) : Closure {
32
        $mapper =
33
            /**
34
            * @return mixed
35
            */
36
            function (string $prop) use ($jsonDef, $array, $class) {
37 20
                if (isset($jsonDef[$prop]) && false === is_array($array[$prop])) {
38 4
                    static::ThrowBecauseArrayJsonTypeNotValid($class, $jsonDef[$prop], $prop);
39
                }
40
41 16
                return $array[$prop];
42 22
            };
43
44 22
        return $mapper;
45
    }
46
47 24
    public static function FilterThrowIfJsonDefNotValid(
48
        string $class,
49
        array $jsonProps,
50
        array $array
51
    ) : array {
52
        $filter = function (string $prop) use ($jsonProps, $array, $class) : bool {
53 24
            if (false === in_array($prop, $jsonProps, true)) {
54 2
                throw new PropertyNotJsonDecodableException($class, $prop);
55
            }
56
57 24
            return false === is_null($array[$prop]);
58 24
        };
59
60 24
        return array_filter($array, $filter, ARRAY_FILTER_USE_KEY);
61
    }
62
63 6
    public static function ArrayToJsonType(string $type, array $value, bool $writeAll) : DaftJson
64
    {
65 6
        self::ThrowIfNotJsonType($type);
66
67
        /**
68
        * @var DaftJson $type
69
        */
70 6
        $type = $type;
71
72 6
        return $type::DaftObjectFromJsonArray($value, $writeAll);
73
    }
74
75
    /**
76
    * @return array<int, DaftJson>|DaftJson
77
    */
78 10
    final public static function DaftJsonFromJsonType(
79
        string $jsonType,
80
        string $prop,
81
        array $propVal,
82
        bool $writeAll
83
    ) {
84 10
        if ('[]' === mb_substr($jsonType, -2)) {
85 6
            $jsonType = mb_substr($jsonType, 0, -2);
86
87 6
            self::ThrowIfNotJsonType($jsonType);
88
89 4
            return self::DaftObjectFromJsonTypeArray($jsonType, $prop, $propVal, $writeAll);
90
        }
91
92 4
        return JsonTypeUtilities::ArrayToJsonType($jsonType, $propVal, $writeAll);
93
    }
94
95
    /**
96
    * @return array<int, DaftJson>
97
    */
98 4
    protected static function DaftObjectFromJsonTypeArray(
99
        string $jsonType,
100
        string $prop,
101
        array $propVal,
102
        bool $writeAll
103
    ) : array {
104 4
        JsonTypeUtilities::ThrowIfNotJsonType($jsonType);
105
106 4
        $out = [];
107
108 4
        foreach ($propVal as $val) {
109 4
            if (false === is_array($val)) {
110 2
                throw new PropertyNotJsonDecodableShouldBeArrayException($jsonType, $prop);
111
            }
112 2
            $out[] = JsonTypeUtilities::ArrayToJsonType($jsonType, $val, $writeAll);
113
        }
114
115 2
        return $out;
116
    }
117
118 4
    private static function ThrowBecauseArrayJsonTypeNotValid(
119
        string $class,
120
        string $type,
121
        string $prop
122
    ) : void {
123 4
        if ('[]' === mb_substr($type, -2)) {
124 2
            throw new PropertyNotJsonDecodableShouldBeArrayException($class, $prop);
125
        }
126 2
        throw new PropertyNotJsonDecodableShouldBeArrayException($type, $prop);
127
    }
128
}
129