Passed
Push — master ( 5c16df...1eb25c )
by Mr
02:34
created

Output::getValue()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
ccs 0
cts 2
cp 0
crap 2
rs 10
1
<?php declare(strict_types=1);
2
/**
3
 * This file is part of the ngutech/bitcoin-interop project.
4
 *
5
 * For the full copyright and license information, please view the LICENSE
6
 * file that was distributed with this source code.
7
 */
8
9
namespace NGUtech\Bitcoin\ValueObject;
10
11
use Daikon\Interop\Assert;
12
use Daikon\Interop\Assertion;
13
use Daikon\ValueObject\ValueObjectInterface;
14
15
final class Output implements ValueObjectInterface
16
{
17
    private Address $address;
18
19
    private Bitcoin $value;
20
21
    /** @param array $state */
22
    public static function fromNative($state): self
23
    {
24
        Assert::that($state)
25
            ->isArray('Must be an array.')
26
            ->notEmpty('Must not be empty.')
27
            ->keyExists('address', "Missing key 'address'.")
28
            ->keyExists('value', "Missing key 'value'.");
29
30
        return new self(Address::fromNative($state['address']), Bitcoin::fromNative($state['value']));
31
    }
32
33
    public function toNative(): array
34
    {
35
        return [
36
            'address' => (string)$this->address,
37
            'value' => (string)$this->value
38
        ];
39
    }
40
41
    public function getAddress(): Address
42
    {
43
        return $this->address;
44
    }
45
46
    public function getValue(): Bitcoin
47
    {
48
        return $this->value;
49
    }
50
51
    /** @param self $comparator */
52
    public function equals($comparator): bool
53
    {
54
        Assertion::isInstanceOf($comparator, self::class);
55
        return $this->toNative() === $comparator->toNative();
56
    }
57
58
    public function __toString(): string
59
    {
60
        return (string)$this->address.':'.(string)$this->value;
61
    }
62
63
    private function __construct(Address $address, Bitcoin $value)
64
    {
65
        $this->address = $address;
66
        $this->value = $value;
67
    }
68
}
69