<?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.jsonapi.json_schema.schema_factory" class="ApiPlatform\JsonApi\JsonSchema\SchemaFactory" decorates="api_platform.json_schema.schema_factory">
            <argument type="service" id="api_platform.jsonapi.json_schema.schema_factory.inner" />
            <argument type="service" id="api_platform.metadata.property.metadata_factory" />
            <argument type="service" id="api_platform.resource_class_resolver" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory" on-invalid="ignore" />
            <argument type="service" id="api_platform.json_schema.definition_name_factory" on-invalid="ignore" />
        </service>

        <service id="api_platform.jsonapi.encoder" class="ApiPlatform\Serializer\JsonEncoder" public="false">
            <argument>jsonapi</argument>

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

        <service id="api_platform.jsonapi.name_converter.reserved_attribute_name" class="ApiPlatform\JsonApi\Serializer\ReservedAttributeNameConverter" public="false">
            <argument type="service" id="api_platform.name_converter" on-invalid="ignore" />
        </service>

        <service id="api_platform.jsonapi.normalizer.entrypoint" class="ApiPlatform\JsonApi\Serializer\EntrypointNormalizer" public="false">
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory" />
            <argument type="service" id="api_platform.iri_converter" />
            <argument type="service" id="api_platform.router" />

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

        <service id="api_platform.jsonapi.normalizer.collection" class="ApiPlatform\JsonApi\Serializer\CollectionNormalizer" public="false">
            <argument type="service" id="api_platform.resource_class_resolver" />
            <argument>%api_platform.collection.pagination.page_parameter_name%</argument>
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory" />

            <!-- Run after api_platform.jsonapi.normalizer.object but before serializer.normalizer.object and serializer.denormalizer.array -->
            <tag name="serializer.normalizer" priority="-985" />
        </service>

        <service id="api_platform.jsonapi.normalizer.item" class="ApiPlatform\JsonApi\Serializer\ItemNormalizer" public="false">
            <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.iri_converter" />
            <argument type="service" id="api_platform.resource_class_resolver" />
            <argument type="service" id="api_platform.property_accessor" />
            <argument type="service" id="api_platform.jsonapi.name_converter.reserved_attribute_name" />
            <argument type="service" id="serializer.mapping.class_metadata_factory" on-invalid="ignore" />
            <argument type="collection" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory" />
            <argument type="service" id="api_platform.security.resource_access_checker" on-invalid="ignore" />
            <argument type="service" id="api_platform.http_cache.tag_collector" on-invalid="ignore" />

            <!-- Run before serializer.normalizer.json_serializable -->
            <tag name="serializer.normalizer" priority="-890" />
        </service>

        <service id="api_platform.jsonapi.normalizer.object" class="ApiPlatform\JsonApi\Serializer\ObjectNormalizer" public="false">
            <argument type="service" id="serializer.normalizer.object" />
            <argument type="service" id="api_platform.iri_converter" />
            <argument type="service" id="api_platform.resource_class_resolver" />
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory" />

            <!-- Run after serializer.denormalizer.array but before serializer.normalizer.object -->
            <tag name="serializer.normalizer" priority="-995" />
        </service>

        <service id="api_platform.jsonapi.normalizer.constraint_violation_list" class="ApiPlatform\JsonApi\Serializer\ConstraintViolationListNormalizer" public="false">
            <argument type="service" id="api_platform.metadata.property.metadata_factory" />
            <argument type="service" id="api_platform.jsonapi.name_converter.reserved_attribute_name" />

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

        <!-- deprecated -->
        <service id="api_platform.jsonapi.normalizer.error" class="ApiPlatform\JsonApi\Serializer\ErrorNormalizer" public="false">
            <argument>%kernel.debug%</argument>
            <argument type="collection"></argument>
            <argument type="service" id="api_platform.jsonapi.normalizer.item" on-invalid="null" />
            <argument type="service" id="api_platform.jsonapi.normalizer.constraint_violation_list" on-invalid="null" />

            <tag name="serializer.normalizer" priority="-790"/>
        </service>
    </services>

</container>
