Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
20.00% covered (danger)
20.00%
3 / 15
33.33% covered (danger)
33.33%
1 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
JsonType
20.00% covered (danger)
20.00%
3 / 15
33.33% covered (danger)
33.33%
1 / 3
61.20
0.00% covered (danger)
0.00%
0 / 1
 serialize
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 parseValue
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 parseLiteral
15.38% covered (danger)
15.38%
2 / 13
0.00% covered (danger)
0.00%
0 / 1
46.77
1<?php
2namespace Apie\Graphql\Types;
3
4use GraphQL\Language\AST\BooleanValueNode;
5use GraphQL\Language\AST\FloatValueNode;
6use GraphQL\Language\AST\IntValueNode;
7use GraphQL\Language\AST\ListValueNode;
8use GraphQL\Language\AST\ObjectValueNode;
9use GraphQL\Language\AST\StringValueNode;
10use GraphQL\Type\Definition\ScalarType;
11
12final class JsonType extends ScalarType
13{
14    public string $name = 'JSON';
15
16    public function serialize($value)
17    {
18        return $value;
19    }
20
21    public function parseValue($value)
22    {
23        return $value;
24    }
25
26    public function parseLiteral($valueNode, ?array $variables = null)
27    {
28        return match (true) {
29            $valueNode instanceof StringValueNode => $valueNode->value,
30            $valueNode instanceof IntValueNode => (int) $valueNode->value,
31            $valueNode instanceof FloatValueNode => (float) $valueNode->value,
32            $valueNode instanceof BooleanValueNode => $valueNode->value,
33            $valueNode instanceof ObjectValueNode => array_map(
34                fn ($field) => $this->parseLiteral($field->value),
35                iterator_to_array($valueNode->fields->getIterator())
36            ),
37            $valueNode instanceof ListValueNode => array_map(
38                fn ($v) => $this->parseLiteral($v),
39                iterator_to_array($valueNode->values->getIterator())
40            ),
41            default => null,
42        };
43    }
44}