HeadersSerializer::fromParser()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 6
dl 0
loc 9
ccs 8
cts 8
cp 1
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 1
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BitWasp\Bitcoin\Networking\Serializer\Message;
6
7
use BitWasp\Bitcoin\Networking\Messages\Headers;
8
use BitWasp\Bitcoin\Serializer\Types;
9
use BitWasp\Buffertools\Buffer;
10
use BitWasp\Buffertools\BufferInterface;
11
use BitWasp\Buffertools\Buffertools;
12
use BitWasp\Buffertools\Parser;
13
14
class HeadersSerializer
15
{
16
    /**
17
     * @var \BitWasp\Buffertools\Types\VarInt
18
     */
19
    private $varint;
20
21
    public function __construct()
22 96
    {
23
        $this->varint = Types::varint();
24 96
    }
25 96
26
    /**
27
     * @param Parser $parser
28
     * @return Headers
29
     */
30 3
    public function fromParser(Parser $parser): Headers
31
    {
32 3
        $numHeaders = $this->varint->read($parser);
33 3
        $headers = [];
34 3
        for ($i = 0; $i < $numHeaders; $i++) {
35 3
            $headers[] = $parser->readBytes(80);
36 3
            $parser->readBytes(1);
37 3
        }
38 3
        return new Headers(...$headers);
39
    }
40
41
    /**
42
     * @param BufferInterface $data
43
     * @return Headers
44
     */
45 3
    public function parse(BufferInterface $data): Headers
46
    {
47 3
        return $this->fromParser(new Parser($data));
48 3
    }
49
50
    /**
51
     * @param Headers $msg
52
     * @return BufferInterface
53
     */
54
    public function serialize(Headers $msg): BufferInterface
55 3
    {
56
        $numHeaders = $msg->count();
57 3
        $encoded = Buffertools::numToVarIntBin($numHeaders);
58
        for ($i = 0; $i < $numHeaders; $i++) {
59
            $encoded .= "{$msg->getHeader($i)->getBinary()}\x00";
60
        }
61
        return new Buffer($encoded);
62
    }
63
}
64