-
Notifications
You must be signed in to change notification settings - Fork 125
/
JaneObjectNormalizer.php
56 lines (54 loc) · 2.66 KB
/
JaneObjectNormalizer.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
namespace Jane\JsonSchema\Tests\Expected\Normalizer;
use Jane\JsonSchema\Tests\Expected\Runtime\Normalizer\CheckArray;
use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface;
use Symfony\Component\Serializer\Normalizer\DenormalizerAwareTrait;
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
class JaneObjectNormalizer implements DenormalizerInterface, NormalizerInterface, DenormalizerAwareInterface, NormalizerAwareInterface
{
use DenormalizerAwareTrait;
use NormalizerAwareTrait;
use CheckArray;
protected $normalizers = array('Jane\\JsonSchema\\Tests\\Expected\\Model\\Model' => 'Jane\\JsonSchema\\Tests\\Expected\\Normalizer\\ModelNormalizer', 'Jane\\JsonSchema\\Tests\\Expected\\Model\\Foo' => 'Jane\\JsonSchema\\Tests\\Expected\\Normalizer\\FooNormalizer', '\\Jane\\Component\\JsonSchemaRuntime\\Reference' => '\\Jane\\JsonSchema\\Tests\\Expected\\Runtime\\Normalizer\\ReferenceNormalizer'), $normalizersCache = array();
public function supportsDenormalization($data, $type, $format = null) : bool
{
return array_key_exists($type, $this->normalizers);
}
public function supportsNormalization($data, $format = null) : bool
{
return is_object($data) && array_key_exists(get_class($data), $this->normalizers);
}
/**
* @return array|string|int|float|bool|\ArrayObject|null
*/
public function normalize($object, $format = null, array $context = array())
{
$normalizerClass = $this->normalizers[get_class($object)];
$normalizer = $this->getNormalizer($normalizerClass);
return $normalizer->normalize($object, $format, $context);
}
/**
* @return mixed
*/
public function denormalize($data, $class, $format = null, array $context = array())
{
$denormalizerClass = $this->normalizers[$class];
$denormalizer = $this->getNormalizer($denormalizerClass);
return $denormalizer->denormalize($data, $class, $format, $context);
}
private function getNormalizer(string $normalizerClass)
{
return $this->normalizersCache[$normalizerClass] ?? $this->initNormalizer($normalizerClass);
}
private function initNormalizer(string $normalizerClass)
{
$normalizer = new $normalizerClass();
$normalizer->setNormalizer($this->normalizer);
$normalizer->setDenormalizer($this->denormalizer);
$this->normalizersCache[$normalizerClass] = $normalizer;
return $normalizer;
}
}