<?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_platform.state_provider.locator" class="ApiPlatform\State\CallableProvider">
            <argument type="tagged_locator" tag="api_platform.state_provider" index-by="key" />
        </service>
        <service id="api_platform.state_provider" alias="api_platform.state_provider.locator" />

        <service id="api_platform.state_provider.main" alias="api_platform.state_provider.locator" />

        <service id="api_platform.state_processor.locator" class="ApiPlatform\State\CallableProcessor">
            <argument type="tagged_locator" tag="api_platform.state_processor" index-by="key" />
        </service>

        <service id="api_platform.state_provider.content_negotiation" class="ApiPlatform\State\Provider\ContentNegotiationProvider" decorates="api_platform.state_provider.main" decoration-priority="100">
            <argument type="service" id="api_platform.state_provider.content_negotiation.inner" />
            <argument type="service" id="api_platform.negotiator" />
            <argument>%api_platform.formats%</argument>
            <argument>%api_platform.error_formats%</argument>
        </service>

        <service id="api_platform.state_provider.read" class="ApiPlatform\State\Provider\ReadProvider" decorates="api_platform.state_provider.main" decoration-priority="500">
            <argument type="service" id="api_platform.state_provider.read.inner" />
            <argument type="service" id="api_platform.serializer.context_builder" />
        </service>

        <service id="api_platform.state_provider.deserialize" class="ApiPlatform\State\Provider\DeserializeProvider" decorates="api_platform.state_provider.main" decoration-priority="300">
            <argument type="service" id="api_platform.state_provider.deserialize.inner" />
            <argument type="service" id="api_platform.serializer" />
            <argument type="service" id="api_platform.serializer.context_builder" />
            <argument type="service" id="translator" on-invalid="null" />
        </service>

        <service id="api_platform.state_processor.respond" class="ApiPlatform\State\Processor\RespondProcessor">
            <argument type="service" id="api_platform.iri_converter" />
            <argument type="service" id="api_platform.resource_class_resolver" />
            <argument type="service" id="api_platform.metadata.operation.metadata_factory" />
        </service>
        <service id="api_platform.state_processor.main" alias="api_platform.state_processor.respond" />

        <service id="api_platform.state_processor.add_link_header" class="ApiPlatform\State\Processor\AddLinkHeaderProcessor" decorates="api_platform.state_processor.respond">
            <argument type="service" id="api_platform.state_processor.add_link_header.inner" />
        </service>

        <service id="api_platform.state_processor.serialize" class="ApiPlatform\State\Processor\SerializeProcessor" decorates="api_platform.state_processor.main" decoration-priority="200">
            <argument type="service" id="api_platform.state_processor.serialize.inner" />
            <argument type="service" id="api_platform.serializer" />
            <argument type="service" id="api_platform.serializer.context_builder" />
        </service>

        <service id="api_platform.state_processor.write" class="ApiPlatform\State\Processor\WriteProcessor" decorates="api_platform.state_processor.main" decoration-priority="100">
            <argument type="service" id="api_platform.state_processor.write.inner" />
            <argument type="service" id="api_platform.state_processor.locator" />
        </service>

        <service id="api_platform.pagination" class="ApiPlatform\State\Pagination\Pagination">
            <argument>%api_platform.collection.pagination%</argument>
            <argument>%api_platform.graphql.collection.pagination%</argument>
        </service>
        <service id="ApiPlatform\State\Pagination\Pagination" alias="api_platform.pagination" />

        <service id="api_platform.serializer_locator" class="Symfony\Component\DependencyInjection\ServiceLocator">
            <tag name="container.service_locator" />
            <argument type="collection">
                <argument key="serializer" type="service" id="api_platform.serializer" />
            </argument>
        </service>
        <service id="api_platform.pagination_options" class="ApiPlatform\State\Pagination\PaginationOptions">
            <argument>%api_platform.collection.pagination.enabled%</argument>
            <argument>%api_platform.collection.pagination.page_parameter_name%</argument>
            <argument>%api_platform.collection.pagination.client_items_per_page%</argument>
            <argument>%api_platform.collection.pagination.items_per_page_parameter_name%</argument>
            <argument>%api_platform.collection.pagination.client_enabled%</argument>
            <argument>%api_platform.collection.pagination.enabled_parameter_name%</argument>
            <argument>%api_platform.collection.pagination.items_per_page%</argument>
            <argument>%api_platform.collection.pagination.maximum_items_per_page%</argument>
            <argument>%api_platform.collection.pagination.partial%</argument>
            <argument>%api_platform.collection.pagination.client_partial%</argument>
            <argument>%api_platform.collection.pagination.partial_parameter_name%</argument>
        </service>
        <service id="ApiPlatform\State\Pagination\PaginationOptions" alias="api_platform.pagination_options" />

        <service id="api_platform.state_provider.create" class="ApiPlatform\State\CreateProvider">
            <argument type="service" id="api_platform.state_provider.locator" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory" />

            <tag name="api_platform.state_provider" key="ApiPlatform\State\CreateProvider" />
            <tag name="api_platform.state_provider" key="api_platform.state_provider.create" />
        </service>
        <service id="ApiPlatform\State\CreateProvider" alias="api_platform.state_provider.create" />

        <service id="api_platform.state_provider.object" class="ApiPlatform\State\ObjectProvider">
            <tag name="api_platform.state_provider" key="ApiPlatform\State\ObjectProvider" />
            <tag name="api_platform.state_provider" key="api_platform.state_provider.object" />
        </service>
        <service id="ApiPlatform\State\ObjectProvider" alias="api_platform.state_provider.object" />

    </services>
</container>
