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!'
);
}
}
|