ClaimCheckSerializerChain::setSerializers()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 6
rs 9.4285
ccs 4
cts 4
cp 1
nc 1
cc 1
eloc 3
nop 1
crap 1
1
<?php
2
3
namespace Abacaphiliac\AwsSdk\ClaimCheck\Serializer;
4
5
use Abacaphiliac\AwsSdk\ClaimCheck\ClaimCheck;
6
use Abacaphiliac\AwsSdk\ClaimCheck\Exception\ExceptionInterface;
7
use Abacaphiliac\AwsSdk\ClaimCheck\Exception\InvalidArgumentException;
8
9
class ClaimCheckSerializerChain implements ClaimCheckSerializerInterface
10
{
11
    /** @var  ClaimCheckSerializerInterface[] */
12
    private $serializers;
13
14
    /**
15
     * SerializerChain constructor.
16
     * @param ClaimCheckSerializerInterface[] $serializers
17
     */
18 25
    public function __construct(array $serializers = [])
19
    {
20 25
        $this->setSerializers($serializers);
21 25
    }
22
23
    /**
24
     * @param ClaimCheck $claimCheck
25
     * @return string
26
     * @throws ExceptionInterface
27
     */
28 5
    public function serialize(ClaimCheck $claimCheck)
29
    {
30 5
        foreach ($this->serializers as $serializer) {
31
            try {
32 5
                return $serializer->serialize($claimCheck);
33 2
            } catch (ExceptionInterface $e) {
34 2
                continue;
35
            }
36 1
        }
37
        
38 1
        throw new InvalidArgumentException('Failed to serialize Claim Check.');
39
    }
40
41
    /**
42
     * @param string $encodedValue
43
     * @return ClaimCheck
44
     * @throws ExceptionInterface
45
     */
46 6
    public function unserialize($encodedValue)
47
    {
48 6
        foreach ($this->serializers as $serializer) {
49
            try {
50 6
                return $serializer->unserialize($encodedValue);
51 3
            } catch (ExceptionInterface $e) {
52 3
                continue;
53
            }
54 2
        }
55
56 2
        throw new InvalidArgumentException('Failed to hydrate Claim Check from message: ' . $encodedValue);
57
    }
58
59
    /**
60
     * @param ClaimCheckSerializerInterface[] $serializers
61
     */
62 25
    private function setSerializers(array $serializers)
63
    {
64 25
        $this->serializers = array();
65
        
66 25
        array_map(array($this, 'addSerializer'), $serializers);
67 25
    }
68
69
    /**
70
     * @param ClaimCheckSerializerInterface $serializer
71
     */
72 25
    private function addSerializer(ClaimCheckSerializerInterface $serializer)
73
    {
74 25
        $this->serializers[] = $serializer;
75 25
    }
76
}
77