Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
85.71% covered (warning)
85.71%
6 / 7
75.00% covered (warning)
75.00%
3 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
DateTimeNormalizer
85.71% covered (warning)
85.71%
6 / 7
75.00% covered (warning)
75.00%
3 / 4
5.07
0.00% covered (danger)
0.00%
0 / 1
 supportsNormalization
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 normalize
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 supportsDenormalization
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 denormalize
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2namespace Apie\Serializer\Normalizers;
3
4use Apie\Core\Lists\ItemHashmap;
5use Apie\Core\Lists\ItemList;
6use Apie\Core\ValueObjects\Utils;
7use Apie\Serializer\Context\ApieSerializerContext;
8use Apie\Serializer\Interfaces\DenormalizerInterface;
9use Apie\Serializer\Interfaces\NormalizerInterface;
10use DateTimeImmutable;
11use DateTimeInterface;
12use Psr\Http\Message\UploadedFileInterface;
13
14final class DateTimeNormalizer implements NormalizerInterface, DenormalizerInterface
15{
16    public function supportsNormalization(mixed $object, ApieSerializerContext $apieSerializerContext): bool
17    {
18        return $object instanceof DateTimeInterface;
19    }
20
21    /**
22     * @param DateTimeInterface $object
23     */
24    public function normalize(mixed $object, ApieSerializerContext $apieSerializerContext): string
25    {
26        return $object->format(DateTimeInterface::ATOM);
27    }
28
29    public function supportsDenormalization(
30        string|int|float|bool|null|ItemList|ItemHashmap|UploadedFileInterface $object,
31        string $desiredType,
32        ApieSerializerContext $apieSerializerContext
33    ): bool {
34        return is_a($desiredType, DateTimeInterface::class, true);
35    }
36
37    /**
38     * @param class-string<DateTimeInterface> $desiredType
39     */
40    public function denormalize(string|int|float|bool|null|ItemList|ItemHashmap|UploadedFileInterface $object, string $desiredType, ApieSerializerContext $apieSerializerContext): DateTimeInterface
41    {
42        $object = Utils::toString($object);
43        if ($desiredType === DateTimeInterface::class) {
44            $desiredType = DateTimeImmutable::class;
45        }
46        return new $desiredType($object);
47    }
48}