Passed
Pull Request — master (#9)
by thomas
03:43 queued 01:53
created

FailureException::handleFailure()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 10
c 0
b 0
f 0
ccs 6
cts 6
cp 1
rs 9.4285
cc 3
eloc 5
nc 3
nop 1
crap 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