1
+ <?php
2
+
3
+ declare (strict_types=1 );
4
+
5
+ namespace EventEngine \JsonSchema \Exception ;
6
+
7
+
8
+ use Opis \JsonSchema \ValidationError ;
9
+
10
+ class OpisJsonValidationError extends JsonValidationError
11
+ {
12
+ /**
13
+ * @var ValidationError[]
14
+ */
15
+ private $ errors ;
16
+
17
+ public static function withError (string $ objectName , ValidationError ...$ validationErrors ): OpisJsonValidationError
18
+ {
19
+ $ self = new self ('Validation of " ' . $ objectName . '" failed: ' );
20
+ $ self ->errors = $ validationErrors ;
21
+
22
+ foreach ($ validationErrors as $ error ) {
23
+ $ self ->message .= $ self ->errorMessage ($ error );
24
+
25
+ if ($ error ->subErrorsCount ()) {
26
+ $ self ->message .= \array_reduce (
27
+ $ error ->subErrors (),
28
+ static function ($ message , ValidationError $ error ) use ($ self ) {
29
+ return $ message . "\n" . $ self ->errorMessage ($ error );
30
+ }
31
+ );
32
+ }
33
+ }
34
+
35
+ return $ self ;
36
+ }
37
+
38
+ /**
39
+ * @return ValidationError[]
40
+ */
41
+ public function errors (): array
42
+ {
43
+ return $ this ->errors ;
44
+ }
45
+
46
+ public function errorMessage (ValidationError $ error ): string
47
+ {
48
+ $ dataPointer = $ error ->dataPointer ();
49
+
50
+ if (count ($ dataPointer ) === 0 ) {
51
+ return \sprintf ('[%s] %s ' , $ error ->keyword (), \json_encode ($ error ->keywordArgs (), JSON_PRETTY_PRINT ));
52
+ }
53
+
54
+ return \sprintf ('field "%s" [%s] %s ' ,
55
+ implode ('. ' , $ dataPointer ),
56
+ $ error ->keyword (),
57
+ \json_encode ($ error ->keywordArgs (), JSON_PRETTY_PRINT )
58
+ );
59
+ }
60
+ }
0 commit comments