Passed
Pull Request — master (#2)
by thomas
01:53
created

FailureException   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 32
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 3
dl 0
loc 32
c 0
b 0
f 0
ccs 6
cts 6
cp 1
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A handleFailure() 0 10 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BitWasp\Trezor\Device\Exception;
6
7
use BitWasp\Trezor\Device\Exception\Failure as FailureErr;
8
use BitWasp\TrezorProto\Failure;
9
use BitWasp\TrezorProto\FailureType;
10
11
abstract class FailureException extends DeviceException
12
{
13
    const MAP_ERROR = [
14
        FailureType::Failure_UnexpectedMessage_VALUE => FailureErr\UnexpectedMessageException::class,
15
        FailureType::Failure_ButtonExpected_VALUE => FailureErr\ButtonExpectedException::class,
16
        FailureType::Failure_DataError_VALUE => FailureErr\DataErrorException::class,
17
        FailureType::Failure_ActionCancelled_VALUE => FailureErr\ActionCancelledException::class,
18
        FailureType::Failure_PinExpected_VALUE => FailureErr\PinExpectedException::class,
19
        FailureType::Failure_PinCancelled_VALUE => FailureErr\PinCancelledException::class,
20
        FailureType::Failure_PinInvalid_VALUE => FailureErr\PinInvalidException::class,
21
        FailureType::Failure_InvalidSignature_VALUE => FailureErr\InvalidSignatureException::class,
22
        FailureType::Failure_ProcessError_VALUE => FailureErr\ProcessErrorException::class,
23
        FailureType::Failure_NotEnoughFunds_VALUE => FailureErr\NotEnoughFundsException::class,
24
        FailureType::Failure_NotInitialized_VALUE => FailureErr\NotInitializedException::class,
25
        FailureType::Failure_PinMismatch_VALUE => FailureErr\PinMismatchException::class,
26
        FailureType::Failure_FirmwareError_VALUE => FailureErr\FirmwareErrorException::class,
27
    ];
28
29
    /**
30
     * @param Failure $failure
31
     * @throws self
32
     */
33 2
    public static function handleFailure(Failure $failure)
34
    {
35 2
        if ($code = $failure->getCode()) {
36 1
            if (array_key_exists($code->value(), self::MAP_ERROR)) {
37 1
                $concrete = self::MAP_ERROR[$code->value()];
38 1
                throw new $concrete($failure->getMessage(), 0);
39
            }
40
        }
41
42 1
        throw new FailureErr\UnknownError($failure->getMessage());
43
    }
44
}
45