GrocyApi/src/Objects/ObjectTransformer.php

39 lines
1.3 KiB
PHP

<?php
namespace Ardent\GrocyApi\Objects;
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
class ObjectTransformer
{
private static function objectList(): array
{
return [
ProductsObject::getEntity() => ProductsObject::class,
QuantityUnitsObject::getEntity() => QuantityUnitsObject::class,
];
}
public static function denormalize($object, string $name): AbstractApiObject
{
// $name = (new CamelCaseToSnakeCaseNameConverter())->denormalize($name);
// sprintf('%s\\%sObject', __NAMESPACE__, ucfirst($name))
return (new ObjectNormalizer())->denormalize($object, self::objectList()[$name]);
}
public static function normalize(AbstractApiObject $object): array
{
$classMetaDataFactory = new ClassMetadataFactory(new AnnotationLoader());
$serializer = new Serializer([
new ObjectNormalizer($classMetaDataFactory, new CamelCaseToSnakeCaseNameConverter()),
]);
return $serializer->normalize($object);
}
}