Completed
Branch develop (22789e)
by Mariano
08:33
created

AnnotationParserFactory::getAnnotationParserFor()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 9
rs 9.6666
cc 3
eloc 5
nc 3
nop 1
1
<?php
2
namespace Mcustiel\SimpleRequest\Strategies;
3
4
use Mcustiel\SimpleRequest\Annotation\RequestAnnotation;
5
use Mcustiel\SimpleRequest\Annotation\ValidatorAnnotation;
6
use Mcustiel\SimpleRequest\Annotation\FilterAnnotation;
7
use Mcustiel\SimpleRequest\Annotation\ParseAs;
8
use Mcustiel\SimpleRequest\Strategies\Annotations\ValidatorAnnotationParser;
9
use Mcustiel\SimpleRequest\Strategies\Annotations\FilterAnnotationParser;
10
use Mcustiel\SimpleRequest\Strategies\Annotations\ParseAsAnnotationParser;
11
12
class AnnotationParserFactory
13
{
14
    private $map = [
15
        ValidatorAnnotation::class => ValidatorAnnotationParser::class,
16
        FilterAnnotation::class => FilterAnnotationParser::class,
17
        ParseAs::class => ParseAsAnnotationParser::class,
18
    ];
19
20
    /**
21
     * @param RequestAnnotation $annotation
22
     * @throws \Exception
23
     * @return \Mcustiel\SimpleRequest\Strategies\Annotations\AnnotationParser
24
     */
25
    public function getAnnotationParserFor(RequestAnnotation $annotation)
26
    {
27
        foreach ($this->map as $key => $val) {
28
            if ($annotation instanceof  $key) {
29
                return new $val;
30
            }
31
        }
32
        throw new \Exception('Unsupported annotation: ' . get_class($annotation));
33
    }
34
}
35