<?php

namespace Symfony\Component\Serializer\Normalizer;

use ArrayObject;
use Symfony\Component\Serializer\Exception\CircularReferenceException;
use Symfony\Component\Serializer\Exception\ExceptionInterface;
use Symfony\Component\Serializer\Exception\InvalidArgumentException;
use Symfony\Component\Serializer\Exception\LogicException;

interface NormalizerInterface
{
    /**
     * @param mixed $object
     * @param string|null $format
     * @param array<mixed> $context
     *
     * @return array<mixed>|ArrayObject<array-key, mixed>|string|int|float|bool|null
     *
     * @throws InvalidArgumentException
     * @throws CircularReferenceException
     * @throws LogicException
     * @throws ExceptionInterface
     */
    public function normalize($object, $format = null, array $context = []);

    /**
     * @param mixed $data
     * @param string|null $format
     * @param array<mixed> $context
     *
     * @return bool
     */
    public function supportsNormalization($data, $format = null, array $context = []);
}
