Completed
Pull Request — master (#89)
by thomas
03:13
created

HeadersSerializer   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 55
ccs 21
cts 21
cp 1
rs 10
c 0
b 0
f 0
wmc 5

4 Methods

Rating   Name   Duplication   Size   Complexity  
A fromParser() 0 3 1
A __construct() 0 7 1
A serialize() 0 8 2
A parse() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BitWasp\Bitcoin\Networking\Serializer\Message;
6
7
use BitWasp\Bitcoin\Block\BlockHeaderInterface;
8
use BitWasp\Bitcoin\Networking\Messages\Headers;
9
use BitWasp\Bitcoin\Serializer\Block\BlockHeaderSerializer;
10
use BitWasp\Bitcoin\Serializer\Types;
11
use BitWasp\Buffertools\Buffer;
12
use BitWasp\Buffertools\BufferInterface;
13
use BitWasp\Buffertools\Parser;
14
15
class HeadersSerializer
16
{
17
    /**
18
     * @var \BitWasp\Buffertools\Types\Vector
19
     */
20
    private $vectorHeader;
21
22 96
    /**
23
     * @var BlockHeaderSerializer
24 96
     */
25 96
    private $headerSerializer;
26
27
    /**
28
     * @param BlockHeaderSerializer $header
29
     */
30 3
    public function __construct(BlockHeaderSerializer $header)
31
    {
32 3
        $this->headerSerializer = $header;
33 3
        $this->vectorHeader = Types::vector(function (Parser $parser): BlockHeaderInterface {
34 3
            $header = $this->headerSerializer->fromParser($parser);
35 3
            $parser->readBytes(1);
36 3
            return $header;
37 3
        });
38 3
    }
39
40
    /**
41
     * @param Parser $parser
42
     * @return Headers
43
     */
44
    public function fromParser(Parser $parser): Headers
45 3
    {
46
        return new Headers($this->vectorHeader->read($parser));
47 3
    }
48 3
49
    /**
50
     * @param BufferInterface $data
51
     * @return Headers
52
     */
53
    public function parse(BufferInterface $data): Headers
54
    {
55 3
        return $this->fromParser(new Parser($data));
56
    }
57 3
58
    /**
59
     * @param Headers $msg
60
     * @return BufferInterface
61
     */
62
    public function serialize(Headers $msg): BufferInterface
63
    {
64 3
        $headers = [];
65
        foreach ($msg->getHeaders() as $header) {
66 3
            $headers[] = new Buffer("{$this->headerSerializer->serialize($header)->getBinary()}\x00");
67 3
        }
68 3
69 3
        return new Buffer($this->vectorHeader->write($headers));
70 3
    }
71
}
72