|
5 | 5 | use Http\Client\Exception\RequestException;
|
6 | 6 | use Http\Client\HttpAsyncClient;
|
7 | 7 | use Http\Client\HttpClient;
|
| 8 | +use Http\Discovery\MessageFactoryDiscovery; |
| 9 | +use Http\Discovery\StreamFactoryDiscovery; |
8 | 10 | use Http\Message\MessageFactory;
|
9 | 11 | use Http\Message\StreamFactory;
|
10 | 12 | use Http\Promise\Promise;
|
|
24 | 26 | */
|
25 | 27 | class Client implements HttpClient, HttpAsyncClient
|
26 | 28 | {
|
| 29 | + /** |
| 30 | + * @access private |
| 31 | + */ |
| 32 | + const DEPENDENCY_MSG = 'You should either provide $%s argument or install "php-http/discovery"'; |
| 33 | + |
27 | 34 | /**
|
28 | 35 | * cURL options
|
29 | 36 | *
|
@@ -62,19 +69,35 @@ class Client implements HttpClient, HttpAsyncClient
|
62 | 69 | /**
|
63 | 70 | * Create new client
|
64 | 71 | *
|
65 |
| - * @param MessageFactory $messageFactory HTTP Message factory |
66 |
| - * @param StreamFactory $streamFactory HTTP Stream factory |
67 |
| - * @param array $options cURL options (see http://php.net/curl_setopt) |
| 72 | + * @param MessageFactory|null $messageFactory HTTP Message factory |
| 73 | + * @param StreamFactory|null $streamFactory HTTP Stream factory |
| 74 | + * @param array $options cURL options (see http://php.net/curl_setopt) |
| 75 | + * |
| 76 | + * @throws \LogicException If some factory not provided and php-http/discovery not installed |
68 | 77 | *
|
69 | 78 | * @since 1.0
|
70 | 79 | */
|
71 | 80 | public function __construct(
|
72 |
| - MessageFactory $messageFactory, |
73 |
| - StreamFactory $streamFactory, |
| 81 | + MessageFactory $messageFactory = null, |
| 82 | + StreamFactory $streamFactory = null, |
74 | 83 | array $options = []
|
75 | 84 | ) {
|
| 85 | + if (null === $messageFactory) { |
| 86 | + if (!class_exists(MessageFactoryDiscovery::class)) { |
| 87 | + throw new \LogicException(sprintf(self::DEPENDENCY_MSG, 'messageFactory')); |
| 88 | + } |
| 89 | + $messageFactory = MessageFactoryDiscovery::find(); |
| 90 | + } |
76 | 91 | $this->messageFactory = $messageFactory;
|
| 92 | + |
| 93 | + if (null === $streamFactory) { |
| 94 | + if (!class_exists(StreamFactoryDiscovery::class)) { |
| 95 | + throw new \LogicException(sprintf(self::DEPENDENCY_MSG, 'streamFactory')); |
| 96 | + } |
| 97 | + $streamFactory = StreamFactoryDiscovery::find(); |
| 98 | + } |
77 | 99 | $this->streamFactory = $streamFactory;
|
| 100 | + |
78 | 101 | $this->options = $options;
|
79 | 102 | }
|
80 | 103 |
|
|
0 commit comments