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

FrameAddressDecoder::decodeFrameAddress()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 18
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

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