Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
/**
4
 * This file is part of the ramsey/uuid library
5
 *
6
 * For the full copyright and license information, please view the LICENSE
7
 * file that was distributed with this source code.
8
 *
9
 * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
10
 * @license http://opensource.org/licenses/MIT MIT
11
 */
12
 
13
declare(strict_types=1);
14
 
15
namespace Ramsey\Uuid\Builder;
16
 
17
use Ramsey\Uuid\Codec\CodecInterface;
18
use Ramsey\Uuid\Exception\BuilderNotFoundException;
19
use Ramsey\Uuid\Exception\UnableToBuildUuidException;
20
use Ramsey\Uuid\UuidInterface;
21
 
22
/**
23
 * FallbackBuilder builds a UUID by stepping through a list of UUID builders
24
 * until a UUID can be constructed without exceptions
25
 *
26
 * @psalm-immutable
27
 */
28
class FallbackBuilder implements UuidBuilderInterface
29
{
30
    /**
31
     * @param iterable<UuidBuilderInterface> $builders An array of UUID builders
32
     */
33
    public function __construct(private iterable $builders)
34
    {
35
    }
36
 
37
    /**
38
     * Builds and returns a UuidInterface instance using the first builder that
39
     * succeeds
40
     *
41
     * @param CodecInterface $codec The codec to use for building this instance
42
     * @param string $bytes The byte string from which to construct a UUID
43
     *
44
     * @return UuidInterface an instance of a UUID object
45
     *
46
     * @psalm-pure
47
     */
48
    public function build(CodecInterface $codec, string $bytes): UuidInterface
49
    {
50
        $lastBuilderException = null;
51
 
52
        foreach ($this->builders as $builder) {
53
            try {
54
                return $builder->build($codec, $bytes);
55
            } catch (UnableToBuildUuidException $exception) {
56
                $lastBuilderException = $exception;
57
 
58
                continue;
59
            }
60
        }
61
 
62
        throw new BuilderNotFoundException(
63
            'Could not find a suitable builder for the provided codec and fields',
64
            0,
65
            $lastBuilderException
66
        );
67
    }
68
}