Completed
Push — master ( 6cc2de...ecdd96 )
by Adrien
02:40
created

DateTimeType::parseValue()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 3
nc 2
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace GraphQLTests\Doctrine\Blog\Types;
6
7
use DateTime;
8
use GraphQL\Error\Error;
9
use GraphQL\Language\AST\StringValueNode;
10
use GraphQL\Type\Definition\ScalarType;
11
use GraphQL\Utils;
12
13
class DateTimeType extends ScalarType
14
{
15
    public function parseLiteral($valueNode)
16
    {
17
        // Note: throwing GraphQL\Error\Error vs \UnexpectedValueException to benefit from GraphQL
18
        // error location in query:
19
        if (!($valueNode instanceof StringValueNode)) {
20
            throw new Error('Query error: Can only parse strings got: ' . $valueNode->kind, [$valueNode]);
21
        }
22
23
        return $valueNode->value;
24
    }
25
26
    public function parseValue($value)
27
    {
28
        if (!is_string($value)) {
29
            throw new \UnexpectedValueException('Cannot represent value as DateTime date: ' . Utils::printSafe($value));
30
        }
31
32
        return new DateTime($value);
33
    }
34
35
    public function serialize($value)
36
    {
37
        if ($value instanceof DateTime) {
38
            return $value->format('c');
39
        }
40
41
        return $value;
42
    }
43
}
44