<?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>
        <!-- Factories -->
        <service id="hateoas.link_factory" class="Hateoas\Factory\LinkFactory" public="false">
            <argument type="service" id="hateoas.generator.registry" />
            <argument type="service" id="jms_serializer.expression_evaluator" />
        </service>

        <service id="hateoas.links_factory" class="Hateoas\Factory\LinksFactory" public="false">
            <argument type="service" id="hateoas.configuration.metadata_factory" />
            <argument type="service" id="hateoas.link_factory" />
            <argument type="service" id="hateoas.serializer.exclusion_manager" />
        </service>

        <service id="hateoas.embeds_factory" class="Hateoas\Factory\EmbeddedsFactory" public="false">
            <argument type="service" id="hateoas.configuration.metadata_factory" />
            <argument type="service" id="jms_serializer.expression_evaluator" />
            <argument type="service" id="hateoas.serializer.exclusion_manager" />
        </service>

        <!-- Serializers & Handlers -->
        <service id="hateoas.serializer.xml" class="Hateoas\Serializer\XmlSerializer" public="false"/>
        <service id="hateoas.serializer.json_hal" class="Hateoas\Serializer\JsonHalSerializer" public="false" />

        <service id="hateoas.serializer.exclusion.expression_language_strategy" class="JMS\Serializer\Exclusion\ExpressionLanguageExclusionStrategy" public="false">
            <argument type="service" id="jms_serializer.expression_evaluator" />
        </service>

        <service id="hateoas.serializer.exclusion_manager" class="Hateoas\Serializer\ExclusionManager">
            <argument type="service" id="hateoas.serializer.exclusion.expression_language_strategy" />
        </service>

        <!-- Subscribers -->
        <service id="hateoas.event_listener.xml" class="Hateoas\Serializer\AddRelationsListener">
            <tag name="jms_serializer.event_listener" event="serializer.post_serialize" format="xml" method="onPostSerialize" />
            <argument /> <!-- xml serializer -->
            <argument type="service" id="hateoas.links_factory" />
            <argument type="service" id="hateoas.embeds_factory" />
            <argument type="service" id="hateoas.inline_deferrer.embeds" />
            <argument type="service" id="hateoas.inline_deferrer.links" />
        </service>

        <service id="hateoas.event_listener.json" class="Hateoas\Serializer\AddRelationsListener">
            <tag name="jms_serializer.event_listener" event="serializer.post_serialize" format="json" method="onPostSerialize" />
            <argument /> <!-- json serializer -->
            <argument type="service" id="hateoas.links_factory" />
            <argument type="service" id="hateoas.embeds_factory" />
            <argument type="service" id="hateoas.inline_deferrer.embeds" />
            <argument type="service" id="hateoas.inline_deferrer.links" />
        </service>

        <service id="hateoas.inline_deferrer.embeds" class="Hateoas\Serializer\Metadata\InlineDeferrer" public="false"/>
        <service id="hateoas.inline_deferrer.links" class="Hateoas\Serializer\Metadata\InlineDeferrer" public="false"/>
    </services>
</container>
