39 lines
1.3 KiB
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);
|
|
}
|
|
} |