1 | <?php |
||
11 | final class Type implements ConstraintInterface |
||
12 | { |
||
13 | const KEYWORD = 'type'; |
||
14 | |||
15 | /** |
||
16 | * {@inheritdoc} |
||
17 | */ |
||
18 | 52 | public function validate($value, $type, Validator $validator) |
|
19 | { |
||
20 | 52 | Assert::type($type, ['array', 'string'], self::KEYWORD, $validator->getSchemaPath()); |
|
21 | |||
22 | 50 | if (is_array($type)) { |
|
23 | 4 | return $this->anyType($value, $type, $validator); |
|
24 | } |
||
25 | |||
26 | 25 | switch ($type) { |
|
27 | 25 | case 'object': |
|
28 | 16 | return $this->validateType($value, 'is_object', $validator); |
|
29 | 24 | case 'array': |
|
30 | 8 | return $this->validateType($value, 'is_array', $validator); |
|
31 | 23 | case 'boolean': |
|
32 | 8 | return $this->validateType($value, 'is_bool', $validator); |
|
33 | 22 | case 'null': |
|
34 | 4 | return $this->validateType($value, 'is_null', $validator); |
|
35 | 22 | case 'number': |
|
36 | 10 | return $this->validateType( |
|
37 | 10 | $value, |
|
38 | 10 | 'League\JsonGuard\is_json_number', |
|
39 | 10 | $validator |
|
40 | ); |
||
41 | 20 | case 'integer': |
|
42 | 32 | return $this->validateType( |
|
43 | 32 | $value, |
|
44 | 32 | 'League\JsonGuard\is_json_integer', |
|
45 | 32 | $validator |
|
46 | ); |
||
47 | 14 | case 'string': |
|
48 | 28 | return $this->validateType($value, 'is_string', $validator); |
|
49 | } |
||
50 | } |
||
51 | |||
52 | /** |
||
53 | * @param mixed $value |
||
54 | * @param callable $callable |
||
55 | * @param \League\JsonGuard\Validator $validator |
||
56 | * |
||
57 | * @return \League\JsonGuard\ValidationError|null |
||
58 | * |
||
59 | */ |
||
60 | 50 | private function validateType($value, callable $callable, Validator $validator) |
|
68 | |||
69 | /** |
||
70 | * @param mixed $value |
||
71 | * @param array $choices |
||
72 | * |
||
73 | * @param Validator $validator |
||
74 | * |
||
75 | * @return ValidationError|null |
||
76 | */ |
||
77 | 4 | private function anyType($value, array $choices, Validator $validator) |
|
88 | } |
||
89 |