6
6
use Http \Client \Common \HttpMethodsClient ;
7
7
use Http \Client \Common \Plugin ;
8
8
use Http \Client \Common \PluginClient ;
9
- use Http \Client \HttpClient ;
10
- use Http \Discovery \HttpClientDiscovery ;
11
9
use Http \Discovery \MessageFactoryDiscovery ;
10
+ use Http \Discovery \Psr17FactoryDiscovery ;
11
+ use Http \Discovery \Psr18ClientDiscovery ;
12
12
use Http \Message \MessageFactory ;
13
+ use Psr \Http \Client \ClientInterface ;
14
+ use Psr \Http \Message \RequestFactoryInterface ;
15
+ use Psr \Http \Message \StreamFactoryInterface ;
13
16
14
17
class HttpPluginClientBuilder
15
18
{
16
- /** @var HttpClient */
19
+ /** @var ClientInterface */
17
20
private $ httpClient ;
18
21
/** @var HttpMethodsClient|null */
19
22
private $ pluginClient ;
20
- /** @var MessageFactory */
21
- private $ messageFactory ;
23
+ /** @var MessageFactory|RequestFactoryInterface */
24
+ private $ requestFactory ;
25
+ /** @var StreamFactoryInterface */
26
+ private $ streamFactory ;
22
27
/** @var Plugin[] */
23
28
private $ plugins = [];
24
29
25
- public function __construct (HttpClient $ httpClient = null , MessageFactory $ messageFactory = null )
30
+ /**
31
+ * @param MessageFactory|RequestFactoryInterface|null $requestFactory
32
+ */
33
+ public function __construct (ClientInterface $ httpClient = null , $ requestFactory = null , StreamFactoryInterface $ streamFactory = null )
26
34
{
27
- $ this ->httpClient = $ httpClient ?: HttpClientDiscovery::find ();
28
- $ this ->messageFactory = $ messageFactory ?: MessageFactoryDiscovery::find ();
35
+ $ requestFactory = $ requestFactory ?? Psr17FactoryDiscovery::findRequestFactory ();
36
+ if ($ requestFactory instanceof MessageFactory) {
37
+ // Use same format as symfony/deprecation-contracts.
38
+ @trigger_error (sprintf (
39
+ 'Since %s %s: %s is deprecated, use %s instead. ' ,
40
+ 'private-packagist/bitbucket-api ' ,
41
+ '2.2.0 ' ,
42
+ '\Http\Message\MessageFactory ' ,
43
+ RequestFactoryInterface::class
44
+ ), \E_USER_DEPRECATED );
45
+ } elseif (!$ requestFactory instanceof RequestFactoryInterface) {
46
+ /** @var mixed $requestFactory value unknown; set to mixed, prevent PHPStan complaining about guard clauses */
47
+ throw new \TypeError (sprintf (
48
+ '%s::__construct(): Argument #2 ($requestFactory) must be of type %s|%s, %s given ' ,
49
+ self ::class,
50
+ '\Http\Message\MessageFactory ' ,
51
+ RequestFactoryInterface::class,
52
+ is_object ($ requestFactory ) ? get_class ($ requestFactory ) : gettype ($ requestFactory )
53
+ ));
54
+ }
55
+
56
+ $ this ->httpClient = $ httpClient ?: Psr18ClientDiscovery::find ();
57
+ $ this ->requestFactory = $ requestFactory ;
58
+ $ this ->streamFactory = $ streamFactory ?? Psr17FactoryDiscovery::findStreamFactory ();
29
59
}
30
60
31
61
/**
@@ -79,7 +109,8 @@ public function getHttpClient()
79
109
if (!$ this ->pluginClient ) {
80
110
$ this ->pluginClient = new HttpMethodsClient (
81
111
new PluginClient ($ this ->httpClient , $ this ->plugins ),
82
- $ this ->messageFactory
112
+ $ this ->requestFactory ,
113
+ $ this ->streamFactory
83
114
);
84
115
}
85
116
@@ -88,9 +119,20 @@ public function getHttpClient()
88
119
89
120
/**
90
121
* @return MessageFactory
122
+ * @deprecated Use getRequestFactory instead. message will be removed with 3.0
91
123
*/
92
124
public function getMessageFactory ()
93
125
{
94
- return $ this ->messageFactory ;
126
+ return $ this ->requestFactory instanceof MessageFactory
127
+ ? $ this ->requestFactory
128
+ : MessageFactoryDiscovery::find ();
129
+ }
130
+
131
+ /**
132
+ * @return RequestFactoryInterface
133
+ */
134
+ public function getRequestFactory ()
135
+ {
136
+ return $ this ->requestFactory ;
95
137
}
96
138
}
0 commit comments