Passed
Push — main ( 52de70...4bac34 )
by Breno
02:11
created

Guard::guardResult()   A

Complexity

Conditions 5
Paths 9

Size

Total Lines 17
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 10
c 1
b 0
f 0
nc 9
nop 2
dl 0
loc 17
rs 9.6111
1
<?php
2
declare(strict_types=1);
3
4
namespace BrenoRoosevelt\Validation\Exception;
5
6
use BrenoRoosevelt\Validation\Exception\ValidationException;
7
use BrenoRoosevelt\Validation\Exception\ValidationExceptionInterface;
8
use BrenoRoosevelt\Validation\Result;
9
use BrenoRoosevelt\Validation\ResultByField;
10
use BrenoRoosevelt\Validation\Rule;
11
12
trait Guard
13
{
14
    /**
15
     * @throws ValidationException
16
     * @throws ValidationExceptionInterface
17
     */
18
    protected function guardRule(
19
        Rule $rule,
20
        mixed $input,
21
        array $context = [],
22
        ?ValidationExceptionInterface $validationException = null
23
    ): void {
24
        $result = $rule->validate($input, $context);
25
        $this->guardResult($result, $validationException);
26
    }
27
28
    /**
29
     * @throws ValidationExceptionInterface
30
     * @throws ValidationException
31
     */
32
    protected function guardResult(Result $result, ?ValidationExceptionInterface $validationException = null): void
33
    {
34
        if ($result->isOk()) {
35
            return;
36
        }
37
38
        $exception =
39
            $validationException instanceof ValidationExceptionInterface ?
40
                $validationException :
41
                new ValidationException();
42
43
        $field = $result instanceof ResultByField ? $result->getField() : null;
44
        foreach ($result->getErrors() as $error) {
45
            $exception->addError($error, $field);
46
        }
47
48
        throw $exception;
49
    }
50
}
51