PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / trunk
Booking for Appointments and Events Calendar – Amelia vtrunk
2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / vendor / php-http / discovery / src / Strategy / CommonClassesStrategy.php
ameliabooking / vendor / php-http / discovery / src / Strategy Last commit date
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