ParserException   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 25
c 2
b 0
f 0
dl 0
loc 46
ccs 0
cts 24
cp 0
rs 10
wmc 9

4 Methods

Rating   Name   Duplication   Size   Complexity  
A unexpectedToken() 0 6 1
A __construct() 0 6 3
A expectedButGot() 0 7 2
A unexpectedCollectorReturn() 0 11 3
1
<?php
2
declare(strict_types=1);
3
4
namespace JsonDecodeStream\Exception;
5
6
use JsonDecodeStream\Event;
7
use JsonDecodeStream\Token;
8
9
class ParserException extends JsonDecodeStreamException
10
{
11
    const CODE_INVALID_ARGUMENT = 1;
12
    const CODE_UNEXPECTED_VALUE = 2;
13
14
    const CODE_UNEXPECTED_TOKEN = 101;
15
    const CODE_EXPECTED_BUT_GOT = 102;
16
17
    public function __construct($message, int $code, int $lineNumber = null, int $charNumber = null)
18
    {
19
        if ($lineNumber !== null && $charNumber !== null) {
20
            $message .= " at $lineNumber:$charNumber";
21
        }
22
        parent::__construct($message, $code);
23
    }
24
25
    public static function unexpectedToken(Token $token)
26
    {
27
        return new static(
28
            sprintf('Unexpected token `%s`', $token->getId()),
29
            static::CODE_UNEXPECTED_TOKEN,
30
            $token->getLineNumber(), $token->getCharNumber()
31
        );
32
    }
33
34
    public static function expectedButGot(string $expected, Token $gotToken)
35
    {
36
        $got = ($gotToken->getValue() ? json_encode($gotToken->getValue()) : $gotToken->getId());
37
        return new static(
38
            sprintf('Expected `%s` but got `%s`', $expected, $got),
39
            static::CODE_EXPECTED_BUT_GOT,
40
            $gotToken->getLineNumber(), $gotToken->getCharNumber()
41
        );
42
    }
43
44
    public static function unexpectedCollectorReturn($yielded, Event $event)
45
    {
46
        if (is_array($yielded)) {
47
            $dumped = 'array of ' . count($yielded);
48
        } else if (is_object($yielded)) {
49
            $dumped = get_class($yielded);
50
        } else {
51
            $dumped = gettype($yielded);
52
        }
53
        return new static(
54
            'Wrong value returned from collector: ' . $dumped, $event->getLineNumber(), $event->getCharNumber()
55
        );
56
    }
57
}
58