fix: resolve panic when using cross-field validators with ValidateMap #1508
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
When using validators like
required_if,required_unless,excluded_if, orexcluded_unlesswithValidateMap(), the validator panics with "Invalid field namespace". This happens becausegetStructFieldOKInternalcan't navigate primitive types to find referenced fields.Changes
getStructFieldOKInternalinutil.goto returnfound=falseinstead of panicking when encountering types it can't navigateTestCrossNamespaceFieldValidationto verify the new behaviorTestValidateMapWithCrossFieldValidatorsregression test covering all cross-field validatorsHow it works
Cross-field validators call
GetStructFieldOKAdvanced2to find referenced fields. When the field isn't found, they use theirdefaultNotFoundValueparameter to determine the result:required_if: condition not met → field not requiredrequired_unless: condition not met → field requiredexcluded_if: condition not met → field not excludedexcluded_unless: condition not met → field must be excludedTest plan
Fixes #893