Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions error_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,16 +166,22 @@ func FieldPathString(path *validate.FieldPath) string {
return result.String()
}

// markViolationForKey marks the provided error as being for a map key, by
// setting the `for_key` flag on each violation within the validation error.
func markViolationForKey(err error) {
// markViolationForMapEntry marks the provided error as being for a map entry,
// by setting the `for_key` flag on each violation within the validation error
// as well as the field descriptor.
func markViolationForMapEntry(err error, forKey bool, fieldDescriptor protoreflect.FieldDescriptor) {
if err == nil {
return
}
var valErr *ValidationError
if errors.As(err, &valErr) {
for _, violation := range valErr.Violations {
violation.Proto.SetForKey(true)
violation.Proto.SetForKey(forKey)
if forKey {
violation.FieldDescriptor = fieldDescriptor.MapKey()
} else {
violation.FieldDescriptor = fieldDescriptor.MapValue()
}
}
}
}
3 changes: 2 additions & 1 deletion map.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,13 +109,14 @@ func (m *kvPairs) Evaluate(msg protoreflect.Message, val protoreflect.Value, cfg

func (m *kvPairs) evalPairs(msg protoreflect.Message, key protoreflect.MapKey, value protoreflect.Value, cfg *validationConfig) (err error) {
evalErr := m.KeyRules.EvaluateField(msg, key.Value(), cfg, true)
markViolationForKey(evalErr)
markViolationForMapEntry(evalErr, true, m.Descriptor)
ok, err := mergeViolations(err, evalErr, cfg)
if !ok {
return err
}

evalErr = m.ValueRules.EvaluateField(msg, value, cfg, true)
markViolationForMapEntry(evalErr, false, m.Descriptor)
_, err = mergeViolations(err, evalErr, cfg)
return err
}
Expand Down
Loading