@@ -26,6 +26,20 @@ class GuzzleMiddleware
26
26
*/
27
27
private $ failureDetector ;
28
28
29
+ /**
30
+ * Function name to be used for returning a rejected promise.
31
+ *
32
+ * @var string
33
+ */
34
+ private string $ rejectionForFunction ;
35
+
36
+ /**
37
+ * Function name to be used for returning a promise.
38
+ *
39
+ * @var string
40
+ */
41
+ private string $ promiseForFunction ;
42
+
29
43
public function __construct (
30
44
Ganesha $ ganesha ,
31
45
ServiceNameExtractorInterface $ serviceNameExtractor = null ,
@@ -34,6 +48,16 @@ public function __construct(
34
48
$ this ->ganesha = $ ganesha ;
35
49
$ this ->serviceNameExtractor = $ serviceNameExtractor ?: new ServiceNameExtractor ();
36
50
$ this ->failureDetector = $ failureDetector ?: new AlwaysSuccessFailureDetector ();
51
+
52
+ // We need to support both the static and function API of `guzzle/promises` for the time being.
53
+ // https://github.com/guzzle/promises#upgrading-from-function-api
54
+ if (class_exists ('\GuzzleHttp\Promise\Create ' )) {
55
+ $ this ->rejectionForFunction = '\GuzzleHttp\Promise\Create::rejectionFor ' ;
56
+ $ this ->promiseForFunction = '\GuzzleHttp\Promise\Create::promiseFor ' ;
57
+ } else {
58
+ $ this ->rejectionForFunction = '\GuzzleHttp\Promise\rejection_for ' ;
59
+ $ this ->promiseForFunction = '\GuzzleHttp\Promise\promise_for ' ;
60
+ }
37
61
}
38
62
39
63
/**
@@ -46,7 +70,8 @@ public function __invoke(callable $handler): \Closure
46
70
$ serviceName = $ this ->serviceNameExtractor ->extract ($ request , $ options );
47
71
48
72
if (!$ this ->ganesha ->isAvailable ($ serviceName )) {
49
- return \GuzzleHttp \Promise \rejection_for (
73
+ return call_user_func (
74
+ $ this ->rejectionForFunction ,
50
75
new RejectedException (
51
76
sprintf ('"%s" is not available ' , $ serviceName )
52
77
)
@@ -62,11 +87,17 @@ function ($value) use ($serviceName) {
62
87
} else {
63
88
$ this ->ganesha ->success ($ serviceName );
64
89
}
65
- return \GuzzleHttp \Promise \promise_for ($ value );
90
+ return call_user_func (
91
+ $ this ->promiseForFunction ,
92
+ $ value
93
+ );
66
94
},
67
95
function ($ reason ) use ($ serviceName ) {
68
96
$ this ->ganesha ->failure ($ serviceName );
69
- return \GuzzleHttp \Promise \rejection_for ($ reason );
97
+ return call_user_func (
98
+ $ this ->rejectionForFunction ,
99
+ $ reason
100
+ );
70
101
}
71
102
);
72
103
};
0 commit comments