<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <!-- Event listeners -->

        <service id="api_platform.listener.request.add_format" class="ApiPlatform\Symfony\EventListener\AddFormatListener">
            <argument type="service" id="api_platform.negotiator" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory" />
            <argument>%api_platform.formats%</argument>

            <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="28" />
        </service>

        <!-- kernel.request priority must be < 8 to be executed after the Firewall -->
        <service id="api_platform.listener.request.read" class="ApiPlatform\Symfony\EventListener\ReadListener">
            <argument type="service" id="api_platform.state_provider" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory" />
            <argument type="service" id="api_platform.serializer.context_builder" />
            <argument type="service" id="api_platform.uri_variables.converter" />

            <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="4" />
        </service>

        <service id="api_platform.listener.view.write" class="ApiPlatform\Symfony\EventListener\WriteListener">
            <argument type="service" id="api_platform.state_processor" />
            <argument type="service" id="api_platform.iri_converter" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory" />
            <argument type="service" id="api_platform.resource_class_resolver" />
            <argument type="service" id="api_platform.uri_variables.converter" />

            <tag name="kernel.event_listener" event="kernel.view" method="onKernelView" priority="32" />
        </service>

        <service id="api_platform.listener.request.deserialize" class="ApiPlatform\Symfony\EventListener\DeserializeListener">
            <argument type="service" id="api_platform.serializer" />
            <argument type="service" id="api_platform.serializer.context_builder" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory" />

            <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="2" />
        </service>

        <service id="api_platform.listener.view.serialize" class="ApiPlatform\Symfony\EventListener\SerializeListener">
            <argument type="service" id="api_platform.serializer" />
            <argument type="service" id="api_platform.serializer.context_builder" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory" />
            <argument type="service" id="api_platform.resource_class_resolver" />

            <tag name="kernel.event_listener" event="kernel.view" method="onKernelView" priority="16" />
        </service>

        <service id="api_platform.listener.view.respond" class="ApiPlatform\Symfony\EventListener\RespondListener">
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory" />
            <argument type="service" id="api_platform.symfony.iri_converter" on-invalid="null" />
            <tag name="kernel.event_listener" event="kernel.view" method="onKernelView" priority="8" />
        </service>

        <service id="api_platform.listener.exception.validation" class="ApiPlatform\Symfony\Validator\EventListener\ValidationExceptionListener">
            <argument type="service" id="api_platform.serializer" />
            <argument>%api_platform.error_formats%</argument>
            <argument>%api_platform.exception_to_status%</argument>

            <tag name="kernel.event_listener" event="kernel.exception" method="onKernelException" />
        </service>

        <service id="api_platform.listener.exception" class="ApiPlatform\Symfony\EventListener\ExceptionListener">
            <argument>api_platform.action.exception</argument>
            <argument type="service" id="logger" on-invalid="null" />
            <argument>false</argument>
            <argument type="service" id="api_platform.error_listener" on-invalid="null" />

            <tag name="kernel.event_listener" event="kernel.exception" method="onKernelException" priority="-96" />
            <tag name="monolog.logger" channel="request" />
        </service>

        <service id="api_platform.cache_warmer.cache_pool_clearer" class="ApiPlatform\Symfony\Bundle\CacheWarmer\CachePoolClearerCacheWarmer" public="false">
            <argument type="service" id="cache.system_clearer" />
            <argument type="collection">
                <argument>api_platform.cache.metadata.property</argument>
                <argument>api_platform.cache.metadata.property.legacy</argument>
                <argument>api_platform.cache.metadata.resource</argument>
                <argument>api_platform.cache.metadata.resource.legacy</argument>
                <argument>api_platform.cache.metadata.resource_collection</argument>
                <argument>api_platform.cache.route_name_resolver</argument>
                <argument>api_platform.cache.identifiers_extractor</argument>
                <argument>api_platform.cache.subresource_operation_factory</argument>
                <argument>api_platform.elasticsearch.cache.metadata.document</argument>
            </argument>
            <tag name="kernel.cache_warmer" priority="64" />
        </service>

    </services>
</container>
