Skip to content

Commit 540a20a

Browse files
authored
Merge pull request #21 from Barberrrry/fix-pointer-nullable-validation
Fix custom validation of nullable pointer
2 parents 9a95f1e + 1705d53 commit 540a20a

File tree

4 files changed

+33
-7
lines changed

4 files changed

+33
-7
lines changed

entities.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ func toPrimitiveType(fieldType types.TypeDef, validateTags types.ValidatableTags
134134

135135
if len(validateTags) == 1 &&
136136
(validateTags.ContainsTag(types.SimpleTag{Name: types.PointerNotNullKey})) ||
137+
(validateTags.ContainsTag(types.SimpleTag{Name: types.PointerNullableKey})) ||
137138
(validateTags.ContainsTag(types.SimpleTag{Name: types.StructFuncKey})) {
138139
return fieldType
139140
}

examples/aliases/entities.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,12 @@ type FloatType float64
3030
type MapType map[string]int
3131

3232
type User struct {
33-
FirstName StringType `validate:"min_len=2,max_len=15"`
34-
LastName string `validate:"min_len=1,max_len=15"`
35-
NonEmptyString StringType `validate:"func=.ValidateNotEmpty"`
36-
FamilyMembers IntType `validate:"min=1,max=100"`
37-
SomeFloat FloatType `validate:"min=2.55,max=99.99"`
38-
SomeMap MapType `validate:"min_items=2,key=[max_len=64],value=[min=-35,max=34]"`
39-
SomePointer *StringType `validate:"not_null,min_len=20,max_len=150"`
33+
FirstName StringType `validate:"min_len=2,max_len=15"`
34+
LastName string `validate:"min_len=1,max_len=15"`
35+
NonEmptyString StringType `validate:"func=.ValidateNotEmpty"`
36+
FamilyMembers IntType `validate:"min=1,max=100"`
37+
SomeFloat FloatType `validate:"min=2.55,max=99.99"`
38+
SomeMap MapType `validate:"min_items=2,key=[max_len=64],value=[min=-35,max=34]"`
39+
SomePointer *StringType `validate:"not_null,min_len=20,max_len=150"`
40+
SomePointerNullable *StringType `validate:"nullable"`
4041
}

examples/aliases/entities_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,5 +75,24 @@ func Test_User_Validate(t *testing.T) {
7575
require.NotNil(t, err)
7676
assert.Equal(t, `[NonEmptyString: string is empty]`, err.Error())
7777
})
78+
79+
t.Run("SomePointerNullable: valid", func(*testing.T) {
80+
r := validUser
81+
invalidString := StringType("aaaaaa")
82+
r.SomePointerNullable = &invalidString
83+
84+
err := r.Validate()
85+
require.NoError(t, err)
86+
})
87+
88+
t.Run("SomePointerNullable: not valid", func(*testing.T) {
89+
r := validUser
90+
invalidString := StringType("a")
91+
r.SomePointerNullable = &invalidString
92+
93+
err := r.Validate()
94+
require.NotNil(t, err)
95+
assert.Equal(t, `[SomePointerNullable: shorter than 3 chars]`, err.Error())
96+
})
7897
})
7998
}

examples/aliases/validators.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,10 @@ func (r User) Validate() error {
9393
errs.AddFieldf("SomePointer", "longer than 150 chars")
9494
}
9595
}
96+
if r.SomePointerNullable != nil {
97+
if err := r.SomePointerNullable.Validate(); err != nil {
98+
errs.AddField("SomePointerNullable", err)
99+
}
100+
}
96101
return errs.ErrorOrNil()
97102
}

0 commit comments

Comments
 (0)