<?php

declare(strict_types=1);

namespace JMS\Serializer\Metadata\Driver;

use JMS\Serializer\Annotation\SerializerAttribute;

class AttributeDriver extends AnnotationOrAttributeDriver
{
    /**
     * @return list<SerializerAttribute>
     */
    protected function getClassAnnotations(\ReflectionClass $class): array
    {
        return array_map(
            static function (\ReflectionAttribute $attribute): object {
                return $attribute->newInstance();
            },
            $class->getAttributes(SerializerAttribute::class, \ReflectionAttribute::IS_INSTANCEOF)
        );
    }

    /**
     * @return list<SerializerAttribute>
     */
    protected function getMethodAnnotations(\ReflectionMethod $method): array
    {
        return array_map(
            static function (\ReflectionAttribute $attribute): object {
                return $attribute->newInstance();
            },
            $method->getAttributes(SerializerAttribute::class, \ReflectionAttribute::IS_INSTANCEOF)
        );
    }

    /**
     * @return list<SerializerAttribute>
     */
    protected function getPropertyAnnotations(\ReflectionProperty $property): array
    {
        return array_map(
            static function (\ReflectionAttribute $attribute): object {
                return $attribute->newInstance();
            },
            $property->getAttributes(SerializerAttribute::class, \ReflectionAttribute::IS_INSTANCEOF)
        );
    }
}
