Completed
Push — master ( 2c2ab2...58b6ad )
by Tobias
01:06
created

Transformer::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Happyr\MessageSerializer\Transformer;
6
7
use Happyr\MessageSerializer\Transformer\Exception\ConvertToArrayFailedException;
8
use Happyr\MessageSerializer\Transformer\Exception\TransformerNotFoundException;
9
use Symfony\Component\Messenger\Envelope;
10
11
final class Transformer implements MessageToArrayInterface
12
{
13
    /**
14
     * @var TransformerInterface[]
15
     */
16
    private $transformers;
17
18 4
    public function __construct(iterable $transformers)
19
    {
20 4
        $this->transformers = $transformers;
21 4
    }
22
23
    /**
24
     * @throws TransformerNotFoundException
25
     * @throws ConvertToArrayFailedException
26
     */
27 4
    public function toArray($message): array
28
    {
29 4
        foreach ($this->transformers as $transformer) {
30 1
            if (!$transformer->supportsTransform($message)) {
31
                continue;
32
            }
33
34
            try {
35
                return [
36 1
                    'version' => $transformer->getVersion(),
37 1
                    'identifier' => $transformer->getIdentifier(),
38 1
                    'timestamp' => time(),
39 1
                    'payload' => $transformer->getPayload($message),
40
                ];
41
            } catch (\Throwable $throwable) {
42
                throw new ConvertToArrayFailedException(sprintf('Transformer "%s" failed to transform a message.', get_class($transformer)), 0, $throwable);
43
            }
44
        }
45
46 3
        if ($message instanceof Envelope) {
47 1
            $type = sprintf('Envelope<%s>', get_class($message->getMessage()));
48
        } else {
49 2
            $type = is_object($message) ? get_class($message) : gettype($message);
50
        }
51
52 3
        throw new TransformerNotFoundException(sprintf('No transformer found for "%s"', $type));
53
    }
54
}
55