@@ -60,7 +60,33 @@ func NewValidator() (*protovalidate.Validator, error) {
60
60
func formatViolations (violations * validate.Violations ) string {
61
61
var res []string
62
62
for _ , v := range violations .Violations {
63
- res = append (res , fmt .Sprintf ("- Field '%s': %s" , * v . FieldPath , * v .Message ))
63
+ res = append (res , fmt .Sprintf ("- Field '%s': %s" , getFullPath ( v . Field ) , * v .Message ))
64
64
}
65
65
return strings .Join (res , "\n " )
66
66
}
67
+
68
+ func getFullPath (field * validate.FieldPath ) string {
69
+ var pathElements []string
70
+ for _ , element := range field .GetElements () {
71
+ if element .GetFieldName () != "" {
72
+ pathElements = append (pathElements , element .GetFieldName ())
73
+ } else if element .GetFieldNumber () != 0 {
74
+ pathElements = append (pathElements , fmt .Sprintf ("%d" , element .GetFieldNumber ()))
75
+ }
76
+ if element .GetSubscript () != nil {
77
+ switch subscript := element .GetSubscript ().(type ) {
78
+ case * validate.FieldPathElement_Index :
79
+ pathElements [len (pathElements )- 1 ] = fmt .Sprintf ("%s[%d]" , pathElements [len (pathElements )- 1 ], subscript .Index )
80
+ case * validate.FieldPathElement_BoolKey :
81
+ pathElements [len (pathElements )- 1 ] = fmt .Sprintf ("%s[%t]" , pathElements [len (pathElements )- 1 ], subscript .BoolKey )
82
+ case * validate.FieldPathElement_IntKey :
83
+ pathElements [len (pathElements )- 1 ] = fmt .Sprintf ("%s[%d]" , pathElements [len (pathElements )- 1 ], subscript .IntKey )
84
+ case * validate.FieldPathElement_UintKey :
85
+ pathElements [len (pathElements )- 1 ] = fmt .Sprintf ("%s[%d]" , pathElements [len (pathElements )- 1 ], subscript .UintKey )
86
+ case * validate.FieldPathElement_StringKey :
87
+ pathElements [len (pathElements )- 1 ] = fmt .Sprintf ("%s[%s]" , pathElements [len (pathElements )- 1 ], subscript .StringKey )
88
+ }
89
+ }
90
+ }
91
+ return strings .Join (pathElements , "." )
92
+ }
0 commit comments