Completed
Push — master ( 4c10a8...999ca2 )
by thomas
8s
created

NetworkAddressSerializer::fromParser()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 10
ccs 7
cts 7
cp 1
rs 9.4285
cc 1
eloc 7
nc 1
nop 1
crap 1
1
<?php
2
3
namespace BitWasp\Bitcoin\Networking\Serializer\Structure;
4
5
use BitWasp\Bitcoin\Networking\Serializer\Ip\IpSerializer;
6
use BitWasp\Bitcoin\Networking\Structure\NetworkAddress;
7
use BitWasp\Buffertools\BufferInterface;
8
use BitWasp\Buffertools\Parser;
9
use BitWasp\Buffertools\TemplateFactory;
10
11
class NetworkAddressSerializer
12
{
13
    /**
14
     * @return \BitWasp\Buffertools\Template
15
     */
16 27
    private function getTemplate()
17
    {
18 27
        return (new TemplateFactory())
19 27
            ->uint64le()
20 27
            ->bytestring(16)
21 27
            ->uint16()
22 27
            ->getTemplate();
23
    }
24
25
    /**
26
     * @param NetworkAddress $addr
27
     * @return BufferInterface
28
     */
29 27
    public function serialize(NetworkAddress $addr)
30
    {
31 27
        return $this->getTemplate()->write([
32 27
            $addr->getServices(),
33 27
            $addr->getIp()->getBuffer(),
34 27
            $addr->getPort()
35 27
        ]);
36
    }
37
38
    /**
39
     * @param Parser $parser
40
     * @return NetworkAddress
41
     */
42 15
    public function fromParser(Parser & $parser)
43
    {
44 15
        list ($services, $ipBuffer, $port) = $this->getTemplate()->parse($parser);
45 15
        $ipSerializer = new IpSerializer();
46 15
        return new NetworkAddress(
47 15
            $services,
48 15
            $ipSerializer->parse($ipBuffer),
49
            $port
50 15
        );
51
    }
52
53
    /**
54
     * @param $data
55
     * @return NetworkAddress
56
     */
57 15
    public function parse($data)
58
    {
59 15
        return $this->fromParser(new Parser($data));
60
    }
61
}
62