<!--
  ~ This file is part of the Alice package.
  ~
  ~ (c) Nelmio <hello@nelm.io>
  ~
  ~ For the full copyright and license information, please view the LICENSE
  ~ file that was distributed with this source code.
  -->

<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="nelmio_alice.fixture_builder.denormalizer.fixture_bag"
                 alias="nelmio_alice.fixture_builder.denormalizer.fixture.simple_fixture_bag_denormalizer" />

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.simple_fixture_bag_denormalizer"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\SimpleFixtureBagDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture" />
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.flag_parser" />
        </service>

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture"
                 alias="nelmio_alice.fixture_builder.denormalizer.fixture.tolerant_denormalizer" />

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.tolerant_denormalizer"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\TolerantFixtureDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.registry_denormalizer" />
        </service>

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.registry_denormalizer"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\FixtureDenormalizerRegistry">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.flag_parser" />
            <!-- Injected via a compiler pass -->
        </service>


        <!-- Chainables -->
        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.chainable.null_list"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\Chainable\NullListNameDenormalizer">
        </service>

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.chainable.temporary_list"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\Chainable\CollectionDenormalizerWithTemporaryFixture">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.chainable.null_list" />
        </service>

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.chainable.simple_list"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\Chainable\SimpleCollectionDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.chainable.temporary_list" />

            <tag name="nelmio_alice.fixture_builder.denormalizer.chainable_fixture_denormalizer" />
        </service>

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.chainable.null_range"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\Chainable\NullRangeNameDenormalizer">
        </service>

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.chainable.reference_range_name"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\Chainable\ReferenceRangeNameDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.specs.simple" />

            <tag name="nelmio_alice.fixture_builder.denormalizer.chainable_fixture_denormalizer" />
        </service>

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.chainable.temporary_range"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\Chainable\CollectionDenormalizerWithTemporaryFixture">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.chainable.null_range" />
        </service>

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.chainable.simple_range"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\Chainable\SimpleCollectionDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.chainable.temporary_range" />

            <tag name="nelmio_alice.fixture_builder.denormalizer.chainable_fixture_denormalizer" />
        </service>

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.chainable.simple"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\Chainable\SimpleDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.specs" />

            <tag name="nelmio_alice.fixture_builder.denormalizer.chainable_fixture_denormalizer" />
        </service>


        <!-- Specification Denormalizer -->
        <service id="nelmio_alice.fixture_builder.denormalizer.specs"
                 alias="nelmio_alice.fixture_builder.denormalizer.specs.simple" />

        <service id="nelmio_alice.fixture_builder.denormalizer.specs.simple"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\SpecificationBagDenormalizer\SimpleSpecificationsDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.constructor" />
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.property" />
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.calls" />
        </service>


        <!-- Specifications Constructors Denormalizer -->
        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.constructor"
                 alias="nelmio_alice.fixture_builder.denormalizer.fixture.specs.constructor.legacy_constructor_denormalizer" />

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.constructor.legacy_constructor_denormalizer"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\SpecificationBagDenormalizer\Constructor\LegacyConstructorDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.constructor.constructor_denormalizer" />
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.constructor.factory_denormalizer" />
        </service>

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.constructor.factory_denormalizer"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\SpecificationBagDenormalizer\Constructor\FactoryDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.calls" />
        </service>

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.constructor.constructor_denormalizer"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\SpecificationBagDenormalizer\Constructor\ConstructorDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.arguments" />
        </service>


        <!-- Specifications Arguments Denormalizer -->
        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.arguments"
                 alias="nelmio_alice.fixture_builder.denormalizer.fixture.specs.arguments.simple_arguments_denormalizer" />

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.arguments.simple_arguments_denormalizer"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\SpecificationBagDenormalizer\Arguments\SimpleArgumentsDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.value" />
        </service>


        <!-- Specifications Values Denormalizer -->
        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.value"
                 alias="nelmio_alice.fixture_builder.denormalizer.fixture.specs.value.unique_value_denormalizer" />

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.value.unique_value_denormalizer"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\SpecificationBagDenormalizer\Value\UniqueValueDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.value.simple_value_denormalizer" />
        </service>

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.value.simple_value_denormalizer"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\SpecificationBagDenormalizer\Value\SimpleValueDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.expression_language.parser" />
        </service>


        <!-- Specifications Properties Denormalizer -->
        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.property"
                 alias="nelmio_alice.fixture_builder.denormalizer.fixture.specs.property.simple_denormalizer" />

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.property.simple_denormalizer"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\SpecificationBagDenormalizer\Property\SimplePropertyDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.value" />
        </service>


        <!-- Specifications Calls Denormalizer -->
        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.calls"
                 alias="nelmio_alice.fixture_builder.denormalizer.fixture.specs.calls.simple_denormalizer" />

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.calls.simple_denormalizer"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\SpecificationBagDenormalizer\Calls\CallsWithFlagsDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.calls.function_denormalizer" />
            <!-- Injected via a compiler pass -->
        </service>

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.calls.function_denormalizer"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\SpecificationBagDenormalizer\Calls\FunctionDenormalizer">
            <argument type="service" id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.arguments" />
        </service>


        <!-- Chainable method call handlers -->
        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.calls.method_flag_handler.configurator_flag_handler"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\SpecificationBagDenormalizer\Calls\MethodFlagHandler\ConfiguratorFlagHandler">
            <tag name="nelmio_alice.fixture_builder.denormalizer.chainable_method_flag_handler" />
        </service>

        <service id="nelmio_alice.fixture_builder.denormalizer.fixture.specs.calls.method_flag_handler.optional_flag_handler"
                 class="Nelmio\Alice\FixtureBuilder\Denormalizer\Fixture\SpecificationBagDenormalizer\Calls\MethodFlagHandler\OptionalFlagHandler">
            <tag name="nelmio_alice.fixture_builder.denormalizer.chainable_method_flag_handler" />
        </service>

    </services>

</container>
