Skip to content

Commit fd3ce63

Browse files
authored
Create Next.php
1 parent 534907e commit fd3ce63

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

src/Next.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace Bermuda\Http\Middleware;
4+
5+
use \SplQueue;
6+
use Psr\Http\Message\ResponseInterface;
7+
use Psr\Http\Server\MiddlewareInterface;
8+
use Psr\Http\Message\ServerRequestInterface;
9+
use Psr\Http\Server\RequestHandlerInterface;
10+
11+
/**
12+
* Handler class that processes the next middleware in the queue.
13+
*
14+
* This class manages the sequential processing of middleware using a queue,
15+
* eliminating the need for position tracking.
16+
*
17+
* @internal This class is for internal use only.
18+
*/
19+
final class Next implements RequestHandlerInterface
20+
{
21+
private SplQueue $queue;
22+
23+
/**
24+
* @param \SplQueue<MiddlewareInterface> $queue Queue of middleware
25+
* @param RequestHandlerInterface $finalHandler Handler to use when queue is empty
26+
*/
27+
public function __construct(
28+
SplQueue $queue,
29+
private readonly RequestHandlerInterface $finalHandler
30+
) {
31+
$this->queue = clone $queue;
32+
}
33+
34+
public function handle(ServerRequestInterface $request): ResponseInterface
35+
{
36+
if ($this->queue->isEmpty()) {
37+
return $this->finalHandler->handle($request);
38+
}
39+
40+
$middleware = $this->queue->dequeue();
41+
return $middleware->process($request, $this);
42+
}
43+
}

0 commit comments

Comments
 (0)