1 | <?php
|
---|
2 |
|
---|
3 | namespace GuzzleHttp\Handler;
|
---|
4 |
|
---|
5 | use GuzzleHttp\Promise\PromiseInterface;
|
---|
6 | use GuzzleHttp\RequestOptions;
|
---|
7 | use Psr\Http\Message\RequestInterface;
|
---|
8 |
|
---|
9 | /**
|
---|
10 | * Provides basic proxies for handlers.
|
---|
11 | *
|
---|
12 | * @final
|
---|
13 | */
|
---|
14 | class Proxy
|
---|
15 | {
|
---|
16 | /**
|
---|
17 | * Sends synchronous requests to a specific handler while sending all other
|
---|
18 | * requests to another handler.
|
---|
19 | *
|
---|
20 | * @param callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface $default Handler used for normal responses
|
---|
21 | * @param callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface $sync Handler used for synchronous responses.
|
---|
22 | *
|
---|
23 | * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the composed handler.
|
---|
24 | */
|
---|
25 | public static function wrapSync(callable $default, callable $sync): callable
|
---|
26 | {
|
---|
27 | return static function (RequestInterface $request, array $options) use ($default, $sync): PromiseInterface {
|
---|
28 | return empty($options[RequestOptions::SYNCHRONOUS]) ? $default($request, $options) : $sync($request, $options);
|
---|
29 | };
|
---|
30 | }
|
---|
31 |
|
---|
32 | /**
|
---|
33 | * Sends streaming requests to a streaming compatible handler while sending
|
---|
34 | * all other requests to a default handler.
|
---|
35 | *
|
---|
36 | * This, for example, could be useful for taking advantage of the
|
---|
37 | * performance benefits of curl while still supporting true streaming
|
---|
38 | * through the StreamHandler.
|
---|
39 | *
|
---|
40 | * @param callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface $default Handler used for non-streaming responses
|
---|
41 | * @param callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface $streaming Handler used for streaming responses
|
---|
42 | *
|
---|
43 | * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the composed handler.
|
---|
44 | */
|
---|
45 | public static function wrapStreaming(callable $default, callable $streaming): callable
|
---|
46 | {
|
---|
47 | return static function (RequestInterface $request, array $options) use ($default, $streaming): PromiseInterface {
|
---|
48 | return empty($options['stream']) ? $default($request, $options) : $streaming($request, $options);
|
---|
49 | };
|
---|
50 | }
|
---|
51 | }
|
---|