* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ namespace Chill\MainBundle\Serializer\Normalizer; use Chill\MainBundle\Entity\Center; use Chill\MainBundle\Repository\CenterRepository; use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; use Symfony\Component\Serializer\Exception\InvalidArgumentException; use Symfony\Component\Serializer\Exception\UnexpectedValueException; /** * * */ class CenterNormalizer implements NormalizerInterface, DenormalizerInterface { private CenterRepository $repository; public function __construct(CenterRepository $repository) { $this->repository = $repository; } public function normalize($center, string $format = null, array $context = array()) { /** @var Center $center */ return [ 'id' => $center->getId(), 'type' => 'center', 'name' => $center->getName() ]; } public function supportsNormalization($data, string $format = null): bool { return $data instanceof Center; } public function denormalize($data, string $type, string $format = null, array $context = []) { if (FALSE === \array_key_exists('type', $data)) { throw new InvalidArgumentException('missing "type" key in data'); } if ('center' !== $data['type']) { throw new InvalidArgumentException('type should be equal to "center"'); } if (FALSE === \array_key_exists('id', $data)) { throw new InvalidArgumentException('missing "id" key in data'); } $center = $this->repository->find($data['id']); if (null === $center) { throw new UnexpectedValueException("The type with id {$data['id']} does not exists"); } return $center; } public function supportsDenormalization($data, string $type, string $format = null) { return $type === Center::class; } }