Passed
Push — master ( 3aaeab...0ddd9a )
by Eugene
02:05
created

UnpackingFailedException   A

Complexity

Total Complexity 25

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Test Coverage

Coverage 96.55%

Importance

Changes 0
Metric Value
eloc 28
dl 0
loc 51
ccs 28
cts 29
cp 0.9655
rs 10
c 0
b 0
f 0
wmc 25

3 Methods

Rating   Name   Duplication   Size   Complexity  
A unknownCode() 0 3 1
A unexpectedCode() 0 3 1
D invalidMapKeyType() 0 39 23
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 64
    public static function invalidMapKeyType(int $code) : self
27
    {
28
        $type = (static function () use ($code) : ?string {
29 64
            if ($code >= 0x90 && $code <= 0x9f) {
30 8
                return 'array';
31
            }
32 56
            if ($code >= 0x80 && $code <= 0x8f) {
33 12
                return 'map';
34
            }
35
36
            switch ($code) {
37 44
                case 0xc0: return 'nil';
38
39 42
                case 0xc2:
40 42
                case 0xc3: return 'bool';
41
42 38
                case 0xca:
43 38
                case 0xcb: return 'float';
44
45 28
                case 0xdc:
46 28
                case 0xdd: return 'array';
47
48 22
                case 0xde:
49 22
                case 0xdf: return 'map';
50
51 16
                case 0xd4:
52 14
                case 0xd5:
53 12
                case 0xd6:
54 10
                case 0xd7:
55 8
                case 0xd8:
56 6
                case 0xc7:
57 4
                case 0xc8:
58 16
                case 0xc9: return 'ext';
59
            }
60
61
            return null;
62 64
        })();
63
64 64
        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)));
65
    }
66
}
67