PluginProbe
DecaLog / 4.4.0
DecaLog v4.4.0
3.0.2 3.1.0 3.10.0 3.2.0 3.3.0 3.4.0 3.4.1 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.6.3 3.7.0 3.7.1 3.8.0 3.9.0 3.9.1 4.0.0 4.1.0 4.2.0 4.3.0 4.3.1 4.4.0 4.5.0 All 75 releases
decalog / includes / libraries / http / client-common / Plugin / RequestMatcherPlugin.php

RequestMatcherPlugin.php in DecaLog 4.4.0, at includes/libraries/http/client-common/Plugin/RequestMatcherPlugin.php

57 lines 1.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace Http\Client\Common\Plugin;
6
7 use Http\Client\Common\Plugin;
8 use Http\Message\RequestMatcher;
9 use Http\Promise\Promise;
10 use Psr\Http\Message\RequestInterface;
11
12 /**
13 * Apply a delegated plugin based on a request match.
14 *
15 * @author Márk Sági-Kazár <mark.sagikazar@gmail.com>
16 */
17 final class RequestMatcherPlugin implements Plugin
18 {
19 /**
20 * @var RequestMatcher
21 */
22 private $requestMatcher;
23
24 /**
25 * @var Plugin|null
26 */
27 private $successPlugin;
28
29 /**
30 * @var Plugin|null
31 */
32 private $failurePlugin;
33
34 public function __construct(RequestMatcher $requestMatcher, ?Plugin $delegateOnMatch, Plugin $delegateOnNoMatch = null)
35 {
36 $this->requestMatcher = $requestMatcher;
37 $this->successPlugin = $delegateOnMatch;
38 $this->failurePlugin = $delegateOnNoMatch;
39 }
40
41 /**
42 * {@inheritdoc}
43 */
44 public function handleRequest(RequestInterface $request, callable $next, callable $first): Promise
45 {
46 if ($this->requestMatcher->matches($request)) {
47 if (null !== $this->successPlugin) {
48 return $this->successPlugin->handleRequest($request, $next, $first);
49 }
50 } elseif (null !== $this->failurePlugin) {
51 return $this->failurePlugin->handleRequest($request, $next, $first);
52 }
53
54 return $next($request);
55 }
56 }
57