-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathImmutable.php
42 lines (35 loc) · 1.01 KB
/
Immutable.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
namespace ICanBoogie\Render\EngineProvider;
use ICanBoogie\Render\Engine;
use ICanBoogie\Render\EngineProvider;
use IteratorAggregate;
use Traversable;
/**
* An immutable engine provider.
*
* @implements IteratorAggregate<string, Engine>
* Where _key_ is a file extension.
*/
final readonly class Immutable implements EngineProvider, IteratorAggregate
{
private Mutable $mutable;
/**
* @param array<string, Engine> $engines
* Where _key_ is an extension; for example, ".php" and _value_ is an Engine.
*/
public function __construct(array $engines = [])
{
$this->mutable = new Mutable();
foreach ($engines as $extension => $engine) {
$this->mutable->add_engine($extension, $engine);
}
}
public function engine_for_extension(string $extension): ?Engine
{
return $this->mutable->engine_for_extension($extension);
}
public function getIterator(): Traversable
{
return $this->mutable->getIterator();
}
}