CommonClassesStrategy.php
6 months ago
CommonPsr17ClassesStrategy.php
6 months ago
DiscoveryStrategy.php
3 years ago
MockClientStrategy.php
2 years ago
PuliBetaStrategy.php
3 years ago
CommonClassesStrategy.php
122 lines
| 1 | <?php |
| 2 | |
| 3 | namespace AmeliaHttp\Discovery\Strategy; |
| 4 | |
| 5 | use AmeliaVendor\GuzzleHttp\Psr7\Request as GuzzleRequest; |
| 6 | use AmeliaHttp\Client\HttpAsyncClient; |
| 7 | use AmeliaHttp\Client\HttpClient; |
| 8 | use AmeliaHttp\Discovery\MessageFactoryDiscovery; |
| 9 | use AmeliaHttp\Message\MessageFactory; |
| 10 | use AmeliaHttp\Message\MessageFactory\GuzzleMessageFactory; |
| 11 | use AmeliaHttp\Message\StreamFactory; |
| 12 | use AmeliaHttp\Message\StreamFactory\GuzzleStreamFactory; |
| 13 | use AmeliaHttp\Message\UriFactory; |
| 14 | use AmeliaHttp\Message\UriFactory\GuzzleUriFactory; |
| 15 | use AmeliaHttp\Message\MessageFactory\DiactorosMessageFactory; |
| 16 | use AmeliaHttp\Message\StreamFactory\DiactorosStreamFactory; |
| 17 | use AmeliaHttp\Message\UriFactory\DiactorosUriFactory; |
| 18 | use Psr\Http\Client\ClientInterface as Psr18Client; |
| 19 | use Zend\Diactoros\Request as DiactorosRequest; |
| 20 | use AmeliaHttp\Message\MessageFactory\SlimMessageFactory; |
| 21 | use AmeliaHttp\Message\StreamFactory\SlimStreamFactory; |
| 22 | use AmeliaHttp\Message\UriFactory\SlimUriFactory; |
| 23 | use Slim\Http\Request as SlimRequest; |
| 24 | use AmeliaHttp\Adapter\Guzzle6\Client as Guzzle6; |
| 25 | use AmeliaHttp\Adapter\Guzzle5\Client as Guzzle5; |
| 26 | use AmeliaHttp\Client\Curl\Client as Curl; |
| 27 | use AmeliaHttp\Client\Socket\Client as Socket; |
| 28 | use AmeliaHttp\Adapter\React\Client as React; |
| 29 | use AmeliaHttp\Adapter\Buzz\Client as Buzz; |
| 30 | use AmeliaHttp\Adapter\Cake\Client as Cake; |
| 31 | use AmeliaHttp\Adapter\Zend\Client as Zend; |
| 32 | use AmeliaHttp\Adapter\Artax\Client as Artax; |
| 33 | use AmeliaNyholm\Psr7\Factory\HttplugFactory as NyholmHttplugFactory; |
| 34 | |
| 35 | /** |
| 36 | * @internal |
| 37 | * |
| 38 | * @author Tobias Nyholm <tobias.nyholm@gmail.com> |
| 39 | */ |
| 40 | final class CommonClassesStrategy implements DiscoveryStrategy |
| 41 | { |
| 42 | /** |
| 43 | * @var array |
| 44 | */ |
| 45 | private static $classes = [ |
| 46 | MessageFactory::class => [ |
| 47 | ['class' => NyholmHttplugFactory::class, 'condition' => [NyholmHttplugFactory::class]], |
| 48 | ['class' => GuzzleMessageFactory::class, 'condition' => [GuzzleRequest::class, GuzzleMessageFactory::class]], |
| 49 | ['class' => DiactorosMessageFactory::class, 'condition' => [DiactorosRequest::class, DiactorosMessageFactory::class]], |
| 50 | ['class' => SlimMessageFactory::class, 'condition' => [SlimRequest::class, SlimMessageFactory::class]], |
| 51 | ], |
| 52 | StreamFactory::class => [ |
| 53 | ['class' => NyholmHttplugFactory::class, 'condition' => [NyholmHttplugFactory::class]], |
| 54 | ['class' => GuzzleStreamFactory::class, 'condition' => [GuzzleRequest::class, GuzzleStreamFactory::class]], |
| 55 | ['class' => DiactorosStreamFactory::class, 'condition' => [DiactorosRequest::class, DiactorosStreamFactory::class]], |
| 56 | ['class' => SlimStreamFactory::class, 'condition' => [SlimRequest::class, SlimStreamFactory::class]], |
| 57 | ], |
| 58 | UriFactory::class => [ |
| 59 | ['class' => NyholmHttplugFactory::class, 'condition' => [NyholmHttplugFactory::class]], |
| 60 | ['class' => GuzzleUriFactory::class, 'condition' => [GuzzleRequest::class, GuzzleUriFactory::class]], |
| 61 | ['class' => DiactorosUriFactory::class, 'condition' => [DiactorosRequest::class, DiactorosUriFactory::class]], |
| 62 | ['class' => SlimUriFactory::class, 'condition' => [SlimRequest::class, SlimUriFactory::class]], |
| 63 | ], |
| 64 | HttpAsyncClient::class => [ |
| 65 | ['class' => Guzzle6::class, 'condition' => Guzzle6::class], |
| 66 | ['class' => Curl::class, 'condition' => Curl::class], |
| 67 | ['class' => React::class, 'condition' => React::class], |
| 68 | ], |
| 69 | HttpClient::class => [ |
| 70 | ['class' => Guzzle6::class, 'condition' => Guzzle6::class], |
| 71 | ['class' => Guzzle5::class, 'condition' => Guzzle5::class], |
| 72 | ['class' => Curl::class, 'condition' => Curl::class], |
| 73 | ['class' => Socket::class, 'condition' => Socket::class], |
| 74 | ['class' => Buzz::class, 'condition' => Buzz::class], |
| 75 | ['class' => React::class, 'condition' => React::class], |
| 76 | ['class' => Cake::class, 'condition' => Cake::class], |
| 77 | ['class' => Zend::class, 'condition' => Zend::class], |
| 78 | ['class' => Artax::class, 'condition' => Artax::class], |
| 79 | [ |
| 80 | 'class' => [self::class, 'buzzInstantiate'], |
| 81 | 'condition' => [\Buzz\Client\FileGetContents::class, \Buzz\Message\ResponseBuilder::class], |
| 82 | ], |
| 83 | ], |
| 84 | Psr18Client::class => [ |
| 85 | [ |
| 86 | 'class' => [self::class, 'buzzInstantiate'], |
| 87 | 'condition' => [\Buzz\Client\FileGetContents::class, \Buzz\Message\ResponseBuilder::class], |
| 88 | ], |
| 89 | ], |
| 90 | ]; |
| 91 | |
| 92 | /** |
| 93 | * {@inheritdoc} |
| 94 | */ |
| 95 | public static function getCandidates($type) |
| 96 | { |
| 97 | if (Psr18Client::class === $type) { |
| 98 | $candidates = self::$classes[PSR18Client::class]; |
| 99 | |
| 100 | // HTTPlug 2.0 clients implements PSR18Client too. |
| 101 | foreach (self::$classes[HttpClient::class] as $c) { |
| 102 | if (is_subclass_of($c['class'], Psr18Client::class)) { |
| 103 | $candidates[] = $c; |
| 104 | } |
| 105 | } |
| 106 | |
| 107 | return $candidates; |
| 108 | } |
| 109 | |
| 110 | if (isset(self::$classes[$type])) { |
| 111 | return self::$classes[$type]; |
| 112 | } |
| 113 | |
| 114 | return []; |
| 115 | } |
| 116 | |
| 117 | public static function buzzInstantiate() |
| 118 | { |
| 119 | return new \Buzz\Client\FileGetContents(MessageFactoryDiscovery::find()); |
| 120 | } |
| 121 | } |
| 122 |