Passed
Push — master ( de3d61...be839c )
by Alec
13:42 queued 13s
created

DriverLinkerFactory::getDriverLinker()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 3
c 0
b 0
f 0
nc 2
nop 0
dl 0
loc 6
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
6
namespace AlecRabbit\Spinner\Core\Factory;
7
8
use AlecRabbit\Spinner\Core\Contract\IDriverLinker;
9
use AlecRabbit\Spinner\Core\Contract\ISettingsProvider;
10
use AlecRabbit\Spinner\Core\Contract\Loop\Contract\ILoop;
11
use AlecRabbit\Spinner\Core\DriverLinker;
12
use AlecRabbit\Spinner\Core\Factory\Contract\IDriverLinkerFactory;
13
14
final class DriverLinkerFactory implements IDriverLinkerFactory
15
{
16
    private static ?IDriverLinker $driverLinker = null;
17
18
    public function __construct(
19
        protected ILoop $loop,
20
        protected ISettingsProvider $settingsProvider,
21
    ) {
22
    }
23
24
    public function getDriverLinker(): IDriverLinker
25
    {
26
        if (self::$driverLinker === null) {
27
            self::$driverLinker = $this->createLinker();
28
        }
29
        return self::$driverLinker;
0 ignored issues
show
Bug Best Practice introduced by
The expression return self::driverLinker could return the type null which is incompatible with the type-hinted return AlecRabbit\Spinner\Core\Contract\IDriverLinker. Consider adding an additional type-check to rule them out.
Loading history...
30
    }
31
32
    private function createLinker(): IDriverLinker
33
    {
34
        return
35
            new DriverLinker(
36
                $this->loop,
37
                $this->settingsProvider->getDriverSettings()->getOptionLinker(),
38
            );
39
    }
40
}
41