![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/vendor/symfony/messenger/Middleware/ |
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <[email protected]> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Messenger\Middleware; use Symfony\Component\Messenger\Envelope; /** * @author Nicolas Grekas <[email protected]> */ class StackMiddleware implements MiddlewareInterface, StackInterface { private $stack; private $offset = 0; /** * @param iterable<mixed, MiddlewareInterface>|MiddlewareInterface|null $middlewareIterator */ public function __construct($middlewareIterator = null) { $this->stack = new MiddlewareStack(); if (null === $middlewareIterator) { return; } if ($middlewareIterator instanceof \Iterator) { $this->stack->iterator = $middlewareIterator; } elseif ($middlewareIterator instanceof MiddlewareInterface) { $this->stack->stack[] = $middlewareIterator; } elseif (!is_iterable($middlewareIterator)) { throw new \TypeError(sprintf('Argument 1 passed to "%s()" must be iterable of "%s", "%s" given.', __METHOD__, MiddlewareInterface::class, get_debug_type($middlewareIterator))); } else { $this->stack->iterator = (function () use ($middlewareIterator) { yield from $middlewareIterator; })(); } } public function next(): MiddlewareInterface { if (null === $next = $this->stack->next($this->offset)) { return $this; } ++$this->offset; return $next; } public function handle(Envelope $envelope, StackInterface $stack): Envelope { return $envelope; } } /** * @internal */ class MiddlewareStack { /** @var \Iterator<mixed, MiddlewareInterface> */ public $iterator; public $stack = []; public function next(int $offset): ?MiddlewareInterface { if (isset($this->stack[$offset])) { return $this->stack[$offset]; } if (null === $this->iterator) { return null; } $this->iterator->next(); if (!$this->iterator->valid()) { return $this->iterator = null; } return $this->stack[] = $this->iterator->current(); } }