Passed
Push — master ( 1a23d8...36a2b2 )
by Hannes
01:53
created

Pipeline::handle()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace inroutephp\inroute\Runtime\Middleware;
6
7
use inroutephp\inroute\Runtime\Exception\DispatchException;
8
use Psr\Http\Message\ServerRequestInterface;
9
use Psr\Http\Message\ResponseInterface;
10
use Psr\Http\Server\MiddlewareInterface;
11
use Psr\Http\Server\RequestHandlerInterface;
12
13
final class Pipeline implements RequestHandlerInterface
14
{
15
    /**
16
     * @var RequestHandlerInterface
17
     */
18
    private $handler;
19
20
    public function __construct(MiddlewareInterface ...$middlewares)
21
    {
22
        $this->handler = new CallbackHandler(function () {
23
            throw new DispatchException('unresolved request: middleware stack exhausted with no result');
24
        });
25
26
        foreach (array_reverse($middlewares) as $middleware) {
27
            $inner = $this->handler;
28
            $this->handler = new CallbackHandler(function (ServerRequestInterface $request) use ($middleware, $inner) {
29
                return $middleware->process($request, $inner);
30
            });
31
        }
32
    }
33
34
    public function handle(ServerRequestInterface $request): ResponseInterface
35
    {
36
        return $this->handler->handle($request);
37
    }
38
}
39