Passed
Branch php81_ci (1e9eda)
by Eugene
08:13
created

UnpackingFailedException::unknownCode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * This file is part of the rybakit/msgpack.php package.
5
 *
6
 * (c) Eugene Leonovich <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace MessagePack\Exception;
13
14
class UnpackingFailedException extends \RuntimeException
15
{
16 1
    public static function unknownCode(int $code) : self
17
    {
18 1
        return new self(\sprintf('Unknown code: 0x%x', $code));
19
    }
20
21 9
    public static function unexpectedCode(int $code, string $type) : self
22
    {
23 9
        return new self(\sprintf('Unexpected %s code: 0x%x', $type, $code));
24
    }
25
26 66
    public static function invalidMapKeyType(int $code) : self
27
    {
28 66
        $type = (static function () use ($code) : ?string {
29 66
            if ($code >= 0x90 && $code <= 0x9f) {
30 8
                return 'array';
31
            }
32 58
            if ($code >= 0x80 && $code <= 0x8f) {
33 12
                return 'map';
34
            }
35
36
            switch ($code) {
37 46
                case 0xc0: return 'nil';
38 44
                case 0xc2:
39 44
                case 0xc3: return 'bool';
40 40
                case 0xca:
41 40
                case 0xcb: return 'float';
42 30
                case 0xdc:
43 30
                case 0xdd: return 'array';
44 24
                case 0xde:
45 24
                case 0xdf: return 'map';
46 16
                case 0xd4:
47 14
                case 0xd5:
48 12
                case 0xd6:
49 10
                case 0xd7:
50 8
                case 0xd8:
51 6
                case 0xc7:
52 4
                case 0xc8:
53 16
                case 0xc9: return 'ext';
54
            }
55
56
            return null;
57 66
        })();
58
59 66
        return new self('Invalid map key type: expected int, str or bin but got '.(\is_null($type) ? \sprintf('0x%x', $code) : \sprintf('%s (0x%x)', $type, $code)));
60
    }
61
}
62