(errs []gojsonschema.ResultError)
| 154 | } |
| 155 | |
| 156 | func getMostSpecificError(errs []gojsonschema.ResultError) validationError { |
| 157 | mostSpecificError := 0 |
| 158 | for i, err := range errs { |
| 159 | if specificity(err) > specificity(errs[mostSpecificError]) { |
| 160 | mostSpecificError = i |
| 161 | continue |
| 162 | } |
| 163 | |
| 164 | if specificity(err) == specificity(errs[mostSpecificError]) { |
| 165 | // Invalid type errors win in a tie-breaker for most specific field name |
| 166 | if err.Type() == "invalid_type" && errs[mostSpecificError].Type() != "invalid_type" { |
| 167 | mostSpecificError = i |
| 168 | } |
| 169 | } |
| 170 | } |
| 171 | |
| 172 | if mostSpecificError+1 == len(errs) { |
| 173 | return validationError{parent: errs[mostSpecificError]} |
| 174 | } |
| 175 | |
| 176 | switch errs[mostSpecificError].Type() { |
| 177 | case "number_one_of", "number_any_of": |
| 178 | return validationError{ |
| 179 | parent: errs[mostSpecificError], |
| 180 | child: errs[mostSpecificError+1], |
| 181 | } |
| 182 | default: |
| 183 | return validationError{parent: errs[mostSpecificError]} |
| 184 | } |
| 185 | } |
| 186 | |
| 187 | func specificity(err gojsonschema.ResultError) int { |
| 188 | return len(strings.Split(err.Field(), ".")) |
no test coverage detected
searching dependent graphs…