Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
86.21% covered (warning)
86.21%
25 / 29
83.33% covered (warning)
83.33%
5 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
MediaInfoDeserializer
86.21% covered (warning)
86.21%
25 / 29
83.33% covered (warning)
83.33%
5 / 6
11.32
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 deserialize
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
1
 deserializeId
55.56% covered (warning)
55.56%
5 / 9
0.00% covered (danger)
0.00%
0 / 1
3.79
 deserializeLabels
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 deserializeDescriptions
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 deserializeStatements
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3namespace Wikibase\MediaInfo\DataModel\Serialization;
4
5use Deserializers\Deserializer;
6use Deserializers\Exceptions\DeserializationException;
7use Deserializers\TypedObjectDeserializer;
8use InvalidArgumentException;
9use Wikibase\DataModel\Statement\StatementList;
10use Wikibase\DataModel\Term\TermList;
11use Wikibase\MediaInfo\DataModel\MediaInfo;
12use Wikibase\MediaInfo\DataModel\MediaInfoId;
13
14/**
15 * @license GPL-2.0-or-later
16 * @author Bene* < benestar.wikimedia@gmail.com >
17 */
18class MediaInfoDeserializer extends TypedObjectDeserializer {
19    /**
20     * @var Deserializer
21     */
22    private $idDeserializer;
23
24    /**
25     * @var Deserializer
26     */
27    private $termListDeserializer;
28
29    /**
30     * @var Deserializer
31     */
32    private $statementListDeserializer;
33
34    /**
35     * @param Deserializer $idDeserializer
36     * @param Deserializer $termListDeserializer
37     * @param Deserializer $statementListDeserializer
38     */
39    public function __construct(
40        Deserializer $idDeserializer,
41        Deserializer $termListDeserializer,
42        Deserializer $statementListDeserializer
43    ) {
44        parent::__construct( 'mediainfo', 'type' );
45
46        $this->idDeserializer = $idDeserializer;
47        $this->termListDeserializer = $termListDeserializer;
48        $this->statementListDeserializer = $statementListDeserializer;
49    }
50
51    /**
52     * @param mixed $serialization
53     *
54     * @throws DeserializationException
55     * @return MediaInfo
56     */
57    public function deserialize( $serialization ) {
58        $this->assertCanDeserialize( $serialization );
59
60        return new MediaInfo(
61            $this->deserializeId( $serialization ),
62            $this->deserializeLabels( $serialization ),
63            $this->deserializeDescriptions( $serialization ),
64            $this->deserializeStatements( $serialization )
65        );
66    }
67
68    /**
69     * @param array $serialization
70     *
71     * @return MediaInfoId|null
72     */
73    private function deserializeId( array $serialization ) {
74        if ( array_key_exists( 'id', $serialization ) ) {
75            $id = $this->idDeserializer->deserialize( $serialization['id'] );
76
77            if ( !$id instanceof MediaInfoId ) {
78                throw new InvalidArgumentException(
79                    'Expected MediaInfoId, got a ' . get_class( $id ) .
80                    ' from deserializing ' . var_export( $serialization, true )
81                );
82            }
83
84            return $id;
85        }
86
87        return null;
88    }
89
90    /**
91     * @param array $serialization
92     *
93     * @return TermList|null
94     */
95    private function deserializeLabels( array $serialization ) {
96        if ( array_key_exists( 'labels', $serialization ) ) {
97            return $this->termListDeserializer->deserialize( $serialization['labels'] );
98        }
99
100        return null;
101    }
102
103    /**
104     * @param array $serialization
105     *
106     * @return TermList|null
107     */
108    private function deserializeDescriptions( array $serialization ) {
109        if ( array_key_exists( 'descriptions', $serialization ) ) {
110            return $this->termListDeserializer->deserialize( $serialization['descriptions'] );
111        }
112
113        return null;
114    }
115
116    /**
117     * @param array $serialization
118     *
119     * @return StatementList|null
120     */
121    private function deserializeStatements( array $serialization ) {
122        if ( array_key_exists( 'statements', $serialization ) ) {
123            return $this->statementListDeserializer->deserialize( $serialization['statements'] );
124        }
125
126        return null;
127    }
128
129}