Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
SenseIdDeserializer
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
2 / 2
5
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 deserialize
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3namespace Wikibase\Lexeme\Presentation\ChangeOp\Deserialization;
4
5use Wikibase\DataModel\Entity\EntityIdParser;
6use Wikibase\DataModel\Entity\EntityIdParsingException;
7use Wikibase\Lexeme\Domain\Model\Sense;
8use Wikibase\Lexeme\Domain\Model\SenseId;
9use Wikibase\Lexeme\MediaWiki\Api\Error\ParameterIsNotSenseId;
10
11/**
12 * A throwing ValidationContext guards us from actual null return values,
13 * w/o it the result is too fuzzy to regard it clean
14 *
15 * @license GPL-2.0-or-later
16 */
17class SenseIdDeserializer {
18
19    /**
20     * @var EntityIdParser
21     */
22    private $entityIdParser;
23
24    public function __construct( EntityIdParser $idParser ) {
25        $this->entityIdParser = $idParser;
26    }
27
28    /**
29     * @param mixed $id
30     * @param ValidationContext $validationContext
31     * @return SenseId|null
32     */
33    public function deserialize( $id, ValidationContext $validationContext ) {
34        if ( !is_string( $id ) ) {
35            $validationContext->addViolation( new ParameterIsNotSenseId( $id ) );
36            return null;
37        }
38
39        try {
40            $senseId = $this->entityIdParser->parse( $id );
41        } catch ( EntityIdParsingException ) {
42            $validationContext->addViolation( new ParameterIsNotSenseId( $id ) );
43            return null;
44        }
45
46        if ( $senseId->getEntityType() !== Sense::ENTITY_TYPE ) {
47            $validationContext->addViolation( new ParameterIsNotSenseId( $id ) );
48            return null;
49        }
50
51        /** @var SenseId $senseId */
52        '@phan-var SenseId $senseId';
53        return $senseId;
54    }
55
56}