Skip to content

Commit ec1baac

Browse files
author
Michał Treter
authored
Fix accessing fields in composed structs (#733)
1 parent 514c9db commit ec1baac

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

validator_instance.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,10 @@ func (v *Validate) StructPartialCtx(ctx context.Context, s interface{}, fields .
414414
if len(flds) > 0 {
415415

416416
vd.misc = append(vd.misc[0:0], name...)
417-
vd.misc = append(vd.misc, '.')
417+
// Don't append empty name for unnamed structs
418+
if len(vd.misc) != 0 {
419+
vd.misc = append(vd.misc, '.')
420+
}
418421

419422
for _, s := range flds {
420423

validator_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -949,6 +949,38 @@ func TestStructPartial(t *testing.T) {
949949
NotEqual(t, errs, nil)
950950
AssertError(t, errs, "TestPartial.Anonymous.SubAnonStruct[0].Test", "TestPartial.Anonymous.SubAnonStruct[0].Test", "Test", "Test", "required")
951951

952+
// Test for unnamed struct
953+
testStruct := &TestStruct{
954+
String: "test",
955+
}
956+
unnamedStruct := struct {
957+
String string `validate:"required" json:"StringVal"`
958+
}{String: "test"}
959+
composedUnnamedStruct := struct{ *TestStruct }{&TestStruct{String: "test"}}
960+
961+
errs = validate.StructPartial(testStruct, "String")
962+
Equal(t, errs, nil)
963+
964+
errs = validate.StructPartial(unnamedStruct, "String")
965+
Equal(t, errs, nil)
966+
967+
errs = validate.StructPartial(composedUnnamedStruct, "TestStruct.String")
968+
Equal(t, errs, nil)
969+
970+
testStruct.String = ""
971+
errs = validate.StructPartial(testStruct, "String")
972+
NotEqual(t, errs, nil)
973+
AssertError(t, errs, "TestStruct.String", "TestStruct.String", "String", "String", "required")
974+
975+
unnamedStruct.String = ""
976+
errs = validate.StructPartial(unnamedStruct, "String")
977+
NotEqual(t, errs, nil)
978+
AssertError(t, errs, "String", "String", "String", "String", "required")
979+
980+
composedUnnamedStruct.String = ""
981+
errs = validate.StructPartial(composedUnnamedStruct, "TestStruct.String")
982+
NotEqual(t, errs, nil)
983+
AssertError(t, errs, "TestStruct.String", "TestStruct.String", "String", "String", "required")
952984
}
953985

954986
func TestCrossStructLteFieldValidation(t *testing.T) {

0 commit comments

Comments
 (0)