<?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.metadata.resource.metadata_collection_factory" alias="api_platform.metadata.resource.metadata_collection_factory.attributes" />

        <service id="ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface" alias="api_platform.metadata.resource.metadata_collection_factory" />

        <service id="api_platform.metadata.resource.metadata_collection_factory.attributes" class="ApiPlatform\Metadata\Resource\Factory\AttributesResourceMetadataCollectionFactory" public="false">
            <argument>null</argument>
            <argument type="service" id="logger" on-invalid="null" />
            <argument>%api_platform.defaults%</argument>
            <argument>%api_platform.graphql.enabled%</argument>
        </service>

        <service id="api_platform.metadata.resource.metadata_collection_factory.xml" class="ApiPlatform\Metadata\Resource\Factory\ExtractorResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="800" public="false">
            <argument type="service" id="api_platform.metadata.resource_extractor.xml" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.xml.inner" />
            <argument>%api_platform.defaults%</argument>
            <argument type="service" id="logger" on-invalid="null" />
            <argument>%api_platform.graphql.enabled%</argument>
        </service>

        <service id="api_platform.metadata.resource.metadata_collection_factory.concerns" class="ApiPlatform\Metadata\Resource\Factory\ConcernsResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="800" public="false">
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.concerns.inner" />
        </service>

        <service id="api_platform.metadata.resource.metadata_collection_factory.not_exposed_operation" class="ApiPlatform\Metadata\Resource\Factory\NotExposedOperationResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="700" public="false">
            <argument type="service" id="api_platform.metadata.resource.link_factory" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.not_exposed_operation.inner" />
        </service>

        <service id="api_platform.metadata.resource.metadata_collection_factory.backed_enum" class="ApiPlatform\Metadata\Resource\Factory\BackedEnumResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="500" public="false">
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.backed_enum.inner" />
        </service>

        <service id="api_platform.metadata.resource.metadata_collection_factory.uri_template" class="ApiPlatform\Metadata\Resource\Factory\UriTemplateResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="500" public="false">
            <argument type="service" id="api_platform.metadata.resource.link_factory" />
            <argument type="service" id="api_platform.path_segment_name_generator" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.uri_template.inner" />
        </service>

        <service id="api_platform.metadata.resource.metadata_collection_factory.main_controller" class="ApiPlatform\Metadata\Resource\Factory\MainControllerResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="500" public="false">
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.main_controller.inner" />
            <argument>%api_platform.use_symfony_listeners%</argument>
        </service>


        <service id="api_platform.metadata.resource.metadata_collection_factory.link" class="ApiPlatform\Metadata\Resource\Factory\LinkResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="500" public="false">
            <argument type="service" id="api_platform.metadata.resource.link_factory" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.link.inner" />
            <argument>%api_platform.graphql.enabled%</argument>
        </service>

        <!-- must run after uri template, do not change uriTemplate neither the operation names in < 500 priorities -->
        <service id="api_platform.metadata.resource.metadata_collection_factory.operation_name" class="ApiPlatform\Metadata\Resource\Factory\OperationNameResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="200" public="false">
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.operation_name.inner" />
        </service>

        <service id="api_platform.metadata.resource.metadata_collection_factory.input_output" class="ApiPlatform\Metadata\Resource\Factory\InputOutputResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="200" public="false">
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.input_output.inner" />
        </service>

        <service id="api_platform.metadata.resource.metadata_collection_factory.formats" class="ApiPlatform\Metadata\Resource\Factory\FormatsResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="200" public="false">
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.formats.inner" />
            <argument>%api_platform.formats%</argument>
            <argument>%api_platform.patch_formats%</argument>
            <argument>%api_platform.error_formats%</argument>
        </service>

        <service id="api_platform.metadata.resource.metadata_collection_factory.filters" class="ApiPlatform\Metadata\Resource\Factory\FiltersResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="200" public="false">
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.filters.inner" />
        </service>

        <service id="api_platform.metadata.resource.metadata_collection_factory.alternate_uri" class="ApiPlatform\Metadata\Resource\Factory\AlternateUriResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="200" public="false">
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.alternate_uri.inner" />
        </service>

        <service id="api_platform.metadata.resource.metadata_collection_factory.parameter" class="ApiPlatform\Metadata\Resource\Factory\ParameterResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" public="false" decoration-priority="1000">
            <argument type="service" id="api_platform.metadata.property.name_collection_factory" />
            <argument type="service" id="api_platform.metadata.property.metadata_factory" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.parameter.inner" />
            <argument type="service" id="api_platform.filter_locator" on-invalid="ignore" />
            <argument type="service" id="api_platform.name_converter" on-invalid="ignore" />
        </service>

        <service id="api_platform.metadata.resource.metadata_collection_factory.cached" class="ApiPlatform\Metadata\Resource\Factory\CachedResourceMetadataCollectionFactory" decorates="api_platform.metadata.resource.metadata_collection_factory" decoration-priority="-10" public="false">
            <argument type="service" id="api_platform.cache.metadata.resource_collection" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory.cached.inner" />
        </service>

        <service id="api_platform.cache.metadata.resource_collection" parent="cache.system" public="false">
            <tag name="cache.pool" />
        </service>
    </services>
</container>
