Passed
Push — master ( af560c...690258 )
by Sébastien
03:19
created

ConfigProvider::getFactories()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 7
nc 1
nop 0
dl 0
loc 12
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Soluble\MediaTools\Video\Config;
6
7
use Soluble\MediaTools\Video\ConversionService;
8
use Soluble\MediaTools\Video\ConversionServiceFactory;
9
use Soluble\MediaTools\Video\ConversionServiceInterface;
10
use Soluble\MediaTools\Video\DetectionService;
11
use Soluble\MediaTools\Video\DetectionServiceFactory;
12
use Soluble\MediaTools\Video\DetectionServiceInterface;
13
use Soluble\MediaTools\Video\InfoService;
14
use Soluble\MediaTools\Video\InfoServiceFactory;
15
use Soluble\MediaTools\Video\InfoServiceInterface;
16
use Soluble\MediaTools\Video\ThumbService;
17
use Soluble\MediaTools\Video\ThumbServiceFactory;
18
use Soluble\MediaTools\Video\ThumbServiceInterface;
19
20
class ConfigProvider
21
{
22
    /**
23
     * @return array<string, array<string,array<string,mixed>>>
24
     */
25
    public function __invoke(): array
26
    {
27
        return [
28
            'dependencies' => $this->getDependencies(),
29
        ];
30
    }
31
32
    /**
33
     * @return array<string, array<string,string>>
34
     */
35
    public function getDependencies(): array
36
    {
37
        return [
38
            'aliases'   => $this->getAliases(),
39
            'factories' => $this->getFactories(),
40
        ];
41
    }
42
43
    /**
44
     * Return concrete implementation aliases if needed.
45
     *
46
     * @return array<string, string>
47
     */
48
    public function getAliases(): array
49
    {
50
        return [
51
            // Configuration holders
52
            FFMpegConfig::class           => FFMpegConfigInterface::class,
53
            FFProbeConfig::class          => FFProbeConfigInterface::class,
54
55
            // Services
56
            ConversionService::class      => ConversionServiceInterface::class,
57
            InfoService::class            => InfoServiceInterface::class,
58
            DetectionService::class       => DetectionServiceInterface::class,
59
            ThumbService::class           => ThumbServiceInterface::class,
60
        ];
61
    }
62
63
    /**
64
     * Return interface based factories.
65
     *
66
     * @return array<string, string>
67
     */
68
    public function getFactories(): array
69
    {
70
        return [
71
            // Configuration holders
72
            FFMpegConfigInterface::class   => FFMpegConfigFactory::class,
73
            FFProbeConfigInterface::class  => FFProbeConfigFactory::class,
74
75
            // Services classes
76
            ConversionServiceInterface::class => ConversionServiceFactory::class,
77
            InfoServiceInterface::class       => InfoServiceFactory::class,
78
            DetectionServiceInterface::class  => DetectionServiceFactory::class,
79
            ThumbServiceInterface::class      => ThumbServiceFactory::class,
80
        ];
81
    }
82
83
    /**
84
     * @return array<string, array<string,mixed>>
85
     */
86
    public function getDefaultConfiguration(): array
87
    {
88
        return require dirname(__DIR__, 3) . '/config/soluble-mediatools.config.php';
89
    }
90
}
91