Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
21 / 21
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
MediaInfoSerializer
100.00% covered (success)
100.00%
21 / 21
100.00% covered (success)
100.00%
4 / 4
6
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 isSerializerFor
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 serialize
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
2
 getSerialized
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3namespace Wikibase\MediaInfo\DataModel\Serialization;
4
5use Serializers\DispatchableSerializer;
6use Serializers\Exceptions\SerializationException;
7use Serializers\Exceptions\UnsupportedObjectException;
8use Serializers\Serializer;
9use Wikibase\MediaInfo\DataModel\MediaInfo;
10
11/**
12 * @license GPL-2.0-or-later
13 * @author Bene* < benestar.wikimedia@gmail.com >
14 */
15class MediaInfoSerializer implements DispatchableSerializer {
16
17    /**
18     * @var Serializer
19     */
20    private $termListSerializer;
21
22    /**
23     * @var Serializer
24     */
25    private $statementListSerializer;
26
27    /**
28     * @param Serializer $termListSerializer
29     * @param Serializer $statementListSerializer
30     */
31    public function __construct(
32        Serializer $termListSerializer,
33        Serializer $statementListSerializer
34    ) {
35        $this->termListSerializer = $termListSerializer;
36        $this->statementListSerializer = $statementListSerializer;
37    }
38
39    /**
40     * @see DispatchableSerializer::isSerializerFor
41     *
42     * @param mixed $object
43     *
44     * @return bool
45     */
46    public function isSerializerFor( $object ) {
47        return $object instanceof MediaInfo;
48    }
49
50    /**
51     * @see Serializer::serialize
52     *
53     * @param MediaInfo $object
54     *
55     * @throws SerializationException
56     * @return array
57     */
58    public function serialize( $object ) {
59        if ( !$this->isSerializerFor( $object ) ) {
60            throw new UnsupportedObjectException(
61                $object,
62                'MediaInfoSerializer can only serialize MediaInfo objects.'
63            );
64        }
65
66        return $this->getSerialized( $object );
67    }
68
69    private function getSerialized( MediaInfo $mediaInfo ) {
70        $serialization = [ 'type' => $mediaInfo->getType() ];
71
72        $id = $mediaInfo->getId();
73
74        if ( $id !== null ) {
75            $serialization['id'] = $id->getSerialization();
76        }
77
78        $serialization['labels'] = $this->termListSerializer->serialize( $mediaInfo->getLabels() );
79        $serialization['descriptions'] = $this->termListSerializer->serialize(
80            $mediaInfo->getDescriptions()
81        );
82        $serialization['statements'] = $this->statementListSerializer->serialize(
83            $mediaInfo->getStatements()
84        );
85
86        return $serialization;
87    }
88
89}