Mercurial > hg > isophonics-drupal-site
diff vendor/symfony/serializer/Normalizer/ArrayDenormalizer.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 7a779792577d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/symfony/serializer/Normalizer/ArrayDenormalizer.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,84 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Serializer\Normalizer; + +use Symfony\Component\Serializer\Exception\BadMethodCallException; +use Symfony\Component\Serializer\Exception\InvalidArgumentException; +use Symfony\Component\Serializer\Exception\UnexpectedValueException; +use Symfony\Component\Serializer\SerializerAwareInterface; +use Symfony\Component\Serializer\SerializerInterface; + +/** + * Denormalizes arrays of objects. + * + * @author Alexander M. Turek <me@derrabus.de> + */ +class ArrayDenormalizer implements DenormalizerInterface, SerializerAwareInterface +{ + /** + * @var SerializerInterface|DenormalizerInterface + */ + private $serializer; + + /** + * {@inheritdoc} + * + * @throws UnexpectedValueException + */ + public function denormalize($data, $class, $format = null, array $context = array()) + { + if ($this->serializer === null) { + throw new BadMethodCallException('Please set a serializer before calling denormalize()!'); + } + if (!is_array($data)) { + throw new InvalidArgumentException('Data expected to be an array, '.gettype($data).' given.'); + } + if (substr($class, -2) !== '[]') { + throw new InvalidArgumentException('Unsupported class: '.$class); + } + + $serializer = $this->serializer; + $class = substr($class, 0, -2); + + $builtinType = isset($context['key_type']) ? $context['key_type']->getBuiltinType() : null; + foreach ($data as $key => $value) { + if (null !== $builtinType && !call_user_func('is_'.$builtinType, $key)) { + throw new UnexpectedValueException(sprintf('The type of the key "%s" must be "%s" ("%s" given).', $key, $builtinType, gettype($key))); + } + + $data[$key] = $serializer->denormalize($value, $class, $format, $context); + } + + return $data; + } + + /** + * {@inheritdoc} + */ + public function supportsDenormalization($data, $type, $format = null) + { + return substr($type, -2) === '[]' + && $this->serializer->supportsDenormalization($data, substr($type, 0, -2), $format); + } + + /** + * {@inheritdoc} + */ + public function setSerializer(SerializerInterface $serializer) + { + if (!$serializer instanceof DenormalizerInterface) { + throw new InvalidArgumentException('Expected a serializer that also implements DenormalizerInterface.'); + } + + $this->serializer = $serializer; + } +}