<?php declare(strict_types=1); namespace api\components\Tokens; use api\components\Tokens\Algorithms\AlgorithmInterface; use Webmozart\Assert\Assert; class AlgorithmsManager { /** * @var AlgorithmInterface[] */ private $algorithms = []; public function __construct(array $algorithms = []) { array_map([$this, 'add'], $algorithms); } public function add(AlgorithmInterface $algorithm): self { $id = $algorithm->getAlgorithmId(); Assert::keyNotExists($this->algorithms, $id, 'passed algorithm is already exists'); $this->algorithms[$algorithm->getSigner()->getAlgorithmId()] = $algorithm; return $this; } /** * @param string $algorithmId * * @return AlgorithmInterface * @throws AlgorithmIsNotDefinedException */ public function get(string $algorithmId): AlgorithmInterface { if (!isset($this->algorithms[$algorithmId])) { throw new AlgorithmIsNotDefinedException($algorithmId); } return $this->algorithms[$algorithmId]; } }