<?xml version="1.0" encoding="UTF-8"?>
<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="httplug.strategy" class="Http\HttplugBundle\Discovery\ConfiguredClientsStrategy">
            <argument type="service" id="httplug.auto_discovery.auto_discovered_client" on-invalid="null"/>
            <argument type="service" id="httplug.auto_discovery.auto_discovered_async" on-invalid="null"/>
        </service>

        <service id="httplug.strategy_listener" class="Http\HttplugBundle\Discovery\ConfiguredClientsStrategyListener">
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="httplug.auto_discovery.auto_discovered_client" class="Http\Client\HttpClient">
            <factory class="Http\Discovery\HttpClientDiscovery" method="find" />
        </service>

        <service id="httplug.auto_discovery.auto_discovered_async" class="Http\Client\HttpAsyncClient">
            <factory class="Http\Discovery\HttpAsyncClientDiscovery" method="find" />
        </service>

        <!-- Discovery with autowiring support -->
        <service id="httplug.message_factory.default" class="Http\Message\MessageFactory">
            <factory class="Http\Discovery\MessageFactoryDiscovery" method="find" />
        </service>
        <service id="Http\Message\MessageFactory" alias="httplug.message_factory" public="false" />
        <service id="Http\Message\RequestFactory" alias="httplug.message_factory" public="false" />
        <service id="Http\Message\ResponseFactory" alias="httplug.message_factory" public="false" />

        <service id="httplug.stream_factory.default" class="Http\Message\StreamFactory">
            <factory class="Http\Discovery\StreamFactoryDiscovery" method="find" />
        </service>
        <service id="Http\Message\StreamFactory" alias="httplug.stream_factory" public="false" />

        <service id="httplug.uri_factory.default" class="Http\Message\UriFactory">
            <factory class="Http\Discovery\UriFactoryDiscovery" method="find" />
        </service>
        <service id="Http\Message\UriFactory" alias="httplug.uri_factory" public="false" />

        <service id="httplug.async_client.default" class="Http\Client\HttpAsyncClient">
            <factory class="Http\Discovery\HttpAsyncClientDiscovery" method="find" />
        </service>
        <service id="Http\Client\HttpAsyncClient" alias="httplug.async_client.default" public="false" />

        <service id="httplug.client.default" class="Http\Client\HttpClient">
            <factory class="Http\Discovery\HttpClientDiscovery" method="find" />
        </service>
        <service id="Psr\Http\Client\ClientInterface" alias="httplug.client" public="false" />

        <!-- Discovery for PSR-18 -->
        <service id="httplug.psr18_client.default" class="Psr\Http\Client\ClientInterface">
            <factory class="Http\Discovery\Psr18ClientDiscovery" method="find" />
        </service>

        <!-- Discovery for PSR-17 -->
        <service id="httplug.psr17_request_factory.default" class="Psr\Http\Message\RequestFactoryInterface">
            <factory class="Http\Discovery\Psr17FactoryDiscovery" method="findRequestFactory" />
        </service>
        <service id="httplug.psr17_response_factory.default" class="Psr\Http\Message\ResponseFactoryInterface">
            <factory class="Http\Discovery\Psr17FactoryDiscovery" method="findResponseFactory" />
        </service>
        <service id="httplug.psr17_stream_factory.default" class="Psr\Http\Message\StreamFactoryInterface">
            <factory class="Http\Discovery\Psr17FactoryDiscovery" method="findStreamFactory" />
        </service>
        <service id="httplug.psr17_uri_factory.default" class="Psr\Http\Message\UriFactoryInterface">
            <factory class="Http\Discovery\Psr17FactoryDiscovery" method="findUrlFactory" />
        </service>
        <service id="httplug.psr17_uploaded_file_factory.default" class="Psr\Http\Message\UploadedFileFactoryInterface">
            <factory class="Http\Discovery\Psr17FactoryDiscovery" method="findUploadedFileFactory" />
        </service>
        <service id="httplug.psr17_server_request_factory.default" class="Psr\Http\Message\ServerRequestFactoryInterface">
            <factory class="Http\Discovery\Psr17FactoryDiscovery" method="findServerRequestFactory" />
        </service>

        <!-- PluginClientFactory -->
        <service id="Http\Client\Common\PluginClientFactory" class="Http\Client\Common\PluginClientFactory" public="false" />

        <!-- ClientFactories -->
        <service id="httplug.factory.auto" class="Http\HttplugBundle\ClientFactory\AutoDiscoveryFactory" public="false" />
        <service id="httplug.factory.buzz" class="Http\HttplugBundle\ClientFactory\BuzzFactory" public="false">
            <argument type="service" id="httplug.message_factory"/>
        </service>
        <service id="httplug.factory.curl" class="Http\HttplugBundle\ClientFactory\CurlFactory" public="false">
            <argument type="service" id="httplug.psr17_response_factory"/>
            <argument type="service" id="httplug.psr17_stream_factory"/>
        </service>
        <service id="httplug.factory.guzzle5" class="Http\HttplugBundle\ClientFactory\Guzzle5Factory" public="false">
            <argument type="service" id="httplug.message_factory"/>
        </service>
        <service id="httplug.factory.guzzle6" class="Http\HttplugBundle\ClientFactory\Guzzle6Factory" public="false" />
        <service id="httplug.factory.guzzle7" class="Http\HttplugBundle\ClientFactory\Guzzle7Factory" public="false" />
        <service id="httplug.factory.react" class="Http\HttplugBundle\ClientFactory\ReactFactory" public="false">
            <argument type="service" id="httplug.message_factory"/>
        </service>
        <service id="httplug.factory.socket" class="Http\HttplugBundle\ClientFactory\SocketFactory" public="false">
            <argument type="service" id="httplug.message_factory"/>
        </service>
        <service id="httplug.factory.symfony" class="Http\HttplugBundle\ClientFactory\SymfonyFactory" public="false">
            <argument type="service" id="httplug.psr17_response_factory"/>
            <argument type="service" id="httplug.psr17_stream_factory"/>
        </service>
    </services>
</container>
