File: UuidIsImmutable.php

package info (click to toggle)
php-ramsey-uuid 4.7.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,124 kB
  • sloc: php: 13,359; xml: 194; python: 54; makefile: 16
file content (110 lines) | stat: -rw-r--r-- 3,037 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php

/**
 * This file is part of the ramsey/uuid library
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 *
 * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
 * @license http://opensource.org/licenses/MIT MIT
 */

declare(strict_types=1);

namespace Ramsey\Uuid\StaticAnalysis;

use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\UuidInterface;

/**
 * This is a static analysis fixture to verify that the API signature
 * of a UUID allows for pure operations. Almost all methods will seem to be
 * redundant or trivial: that's normal, we're just verifying the
 * transitivity of immutable type signatures.
 *
 * Please note that this does not guarantee that the internals of the UUID
 * library are pure/safe, but just that the declared API to the outside world
 * is seen as immutable.
 */
final class UuidIsImmutable
{
    /** @psalm-pure */
    public static function pureCompareTo(UuidInterface $a, UuidInterface $b): int
    {
        return $a->compareTo($b);
    }

    /** @psalm-pure */
    public static function pureEquals(UuidInterface $a, ?object $b): bool
    {
        return $a->equals($b);
    }

    /**
     * @return mixed[]
     *
     * @psalm-pure
     * @psalm-suppress DeprecatedMethod
     */
    public static function pureGetters(UuidInterface $a): array
    {
        return [
            $a->getBytes(),
            $a->getNumberConverter(),
            $a->getHex(),
            $a->getFieldsHex(),
            $a->getClockSeqHiAndReservedHex(),
            $a->getClockSeqLowHex(),
            $a->getClockSequenceHex(),
            $a->getDateTime(),
            $a->getInteger(),
            $a->getLeastSignificantBitsHex(),
            $a->getMostSignificantBitsHex(),
            $a->getNodeHex(),
            $a->getTimeHiAndVersionHex(),
            $a->getTimeLowHex(),
            $a->getTimeMidHex(),
            $a->getTimestampHex(),
            $a->getUrn(),
            $a->getVariant(),
            $a->getVersion(),
            $a->toString(),
            $a->__toString(),
        ];
    }

    /**
     * @return UuidInterface[]|bool[]
     *
     * @psalm-pure
     */
    public static function pureStaticUuidApi(): array
    {
        $id = Uuid::fromString('ff6f8cb0-c57d-11e1-9b21-0800200c9a66');

        return [
            Uuid::fromBytes($id->getBytes()),
            Uuid::fromInteger($id->getInteger()->toString()),
            Uuid::isValid('ff6f8cb0-c57d-11e1-9b21-0800200c9a66'),
        ];
    }

    /** @psalm-pure */
    public static function uuid3IsPure(): UuidInterface
    {
        return Uuid::uuid3(
            Uuid::fromString('ff6f8cb0-c57d-11e1-9b21-0800200c9a66'),
            'Look ma! I am a pure function!'
        );
    }

    /** @psalm-pure */
    public static function uuid5IsPure(): UuidInterface
    {
        return Uuid::uuid5(
            Uuid::fromString('ff6f8cb0-c57d-11e1-9b21-0800200c9a66'),
            'Look ma! I am a pure function!'
        );
    }
}