<?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>

        <service id="api.hydra.documentation_builder" class="Dunglas\ApiBundle\Hydra\ApiDocumentationBuilder">
            <argument type="service" id="api.resource_collection" />
            <argument type="service" id="api.jsonld.context_builder" />
            <argument type="service" id="router" />
            <argument type="service" id="api.mapping.class_metadata_factory" />
            <argument>%api.title%</argument>
            <argument>%api.description%</argument>
        </service>

        <!-- Event listeners -->

        <service id="api.hydra.listener.link_header_response" class="Dunglas\ApiBundle\Hydra\EventListener\LinkHeaderResponseListener">
            <argument type="service" id="router" />

            <tag name="kernel.event_listener" event="kernel.response" method="onKernelResponse" />
        </service>

        <service id="api.hydra.listener.request_exception" class="Dunglas\ApiBundle\Hydra\EventListener\RequestExceptionListener">
            <argument type="service" id="api.serializer" />

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

        <!-- Serializer -->

        <service id="api.hydra.normalizer.collection" class="Dunglas\ApiBundle\Hydra\Serializer\CollectionNormalizer" public="false">
            <argument type="service" id="api.jsonld.context_builder" />
            <argument type="service" id="api.resource_resolver" />

            <tag name="serializer.normalizer" priority="50" />
        </service>

        <service id="api.hydra.normalizer.constraint_violation_list" class="Dunglas\ApiBundle\Hydra\Serializer\ConstraintViolationListNormalizer" public="false" lazy="true">
            <argument type="service" id="router" />

            <tag name="serializer.normalizer" />
        </service>

        <service id="api.hydra.normalizer.error" class="Dunglas\ApiBundle\Hydra\Serializer\ErrorNormalizer" public="false" lazy="true">
            <argument type="service" id="router" />
            <argument>%kernel.debug%</argument>

            <tag name="serializer.normalizer" />
        </service>

        <!-- Action -->

        <service id="api.hydra.action.documentation" class="Dunglas\ApiBundle\Hydra\Action\DocumentationAction">
            <argument type="service" id="api.hydra.documentation_builder" />
        </service>

        <!-- Serializer enhancers -->

        <service
                id="api.hydra.normalizer.paginated_collection_enhancer"
                class="Dunglas\ApiBundle\Hydra\Serializer\PaginatedCollectionEnhancer"
                decorates="api.hydra.normalizer.collection"
                public="false">
            <argument type="service" id="api.hydra.normalizer.paginated_collection_enhancer.inner" />
            <argument type="service" id="api.resource_resolver" />
        </service>

        <service
                id="api.hydra.normalizer.collection_filters_enhancer"
                class="Dunglas\ApiBundle\Hydra\Serializer\CollectionFiltersEnhancer"
                decorates="api.hydra.normalizer.collection"
                public="false">
            <argument type="service" id="api.hydra.normalizer.collection_filters_enhancer.inner" />
            <argument type="service" id="api.resource_resolver" />
        </service>

    </services>

</container>
