Failed Conditions
Push — master ( ba8c0d...a9ded0 )
by thomas
04:50
created

FailureException::handleFailure()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
dl 0
loc 10
ccs 0
cts 9
cp 0
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 5
nc 3
nop 1
crap 12
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
    public static function handleFailure(Failure $failure)
34
    {
35
        if ($code = $failure->getCode()) {
36
            if (array_key_exists($code->value(), self::MAP_ERROR)) {
37
                $concrete = self::MAP_ERROR[$code->value()];
38
                throw new $concrete($failure->getMessage(), 0);
39
            }
40
        }
41
42
        throw new FailureErr\UnknownError($failure->getMessage());
43
    }
44
}
45