Completed
Pull Request — master (#2)
by thomas
02:16
created

FailureException   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Test Coverage

Coverage 83.33%

Importance

Changes 0
Metric Value
wmc 2
dl 0
loc 31
c 0
b 0
f 0
ccs 5
cts 6
cp 0.8333
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A handleFailure() 0 9 2
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 1
    public static function handleFailure(Failure $failure)
34
    {
35 1
        $key = $failure->getCode()->value();
36 1
        if (array_key_exists($key, self::MAP_ERROR)) {
37 1
            $concrete = self::MAP_ERROR[$key];
38 1
            throw new $concrete($failure->getMessage(), 0);
39
        }
40
41
        throw new FailureErr\UnknownError($failure->getMessage(), $failure->getCode()->value());
42
    }
43
}
44