Passed
Push — master ( 8634b9...ba407f )
by Chris
14:07
created

FrameAddressDecoder   A

Complexity

Total Complexity 1

Size/Duplication

Total Lines 21
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
dl 0
loc 21
ccs 0
cts 13
cp 0
rs 10
c 0
b 0
f 0
wmc 1
lcom 0
cbo 3

1 Method

Rating   Name   Duplication   Size   Complexity  
A decodeFrameAddress() 0 18 1
1
<?php declare(strict_types=1);
2
3
namespace DaveRandom\LibLifxLan\Decoding;
4
5
use DaveRandom\LibLifxLan\Header\FrameAddress;
6
use DaveRandom\Network\MacAddress;
7
8
final class FrameAddressDecoder
9
{
10
    public function decodeFrameAddress(string $data): FrameAddress
11
    {
12
        \assert(
13
            \strlen($data) === FrameAddress::WIRE_SIZE,
14
            new \Error("Frame address data length expected to be " . FrameAddress::WIRE_SIZE . " bytes, got " . \strlen($data) . " bytes")
15
        );
16
17
        $parts = \unpack('C8tgt/C6reserved/Cflags/Csequence', $data);
18
19
        $target = new MacAddress($parts['tgt1'], $parts['tgt2'], $parts['tgt3'], $parts['tgt4'], $parts['tgt5'], $parts['tgt6']);
20
21
        $isAckRequired      = (bool)($parts['flags'] & 0x02);
22
        $isResponseRequired = (bool)($parts['flags'] & 0x01);
23
24
        $sequence = $parts['sequence'];
25
26
        return new FrameAddress($target, $isAckRequired, $isResponseRequired, $sequence);
27
    }
28
}
29