improve package gvalid

This commit is contained in:
John
2020-08-20 23:25:36 +08:00
parent 1874808e3b
commit a841c4cc05
4 changed files with 34 additions and 1 deletions

View File

@ -89,8 +89,10 @@ func CheckMap(params interface{}, rules interface{}, messages ...CustomMsg) *Err
}
if e := doCheck(key, value, rule, customMsgs[key], data); e != nil {
_, item := e.FirstItem()
// ===========================================================
// If value is nil or empty string and has no required* rules,
// clear the error message.
// ===========================================================
if gconv.String(value) == "" {
required := false
// rule => error

View File

@ -151,8 +151,10 @@ func CheckStruct(object interface{}, rules interface{}, messages ...CustomMsg) *
}
if e := doCheck(key, value, rule, customMessage[key], params); e != nil {
_, item := e.FirstItem()
// ===========================================================
// If value is nil or empty string and has no required* rules,
// clear the error message.
// ===========================================================
if value == nil || gconv.String(value) == "" {
required := false
// rule => error

View File

@ -25,7 +25,7 @@ var (
// It returns error if there's already the same rule registered previously.
func RegisterRule(rule string, f RuleFunc) error {
if _, ok := allSupportedRules[rule]; ok {
return fmt.Errorf(`validation rule "%s" is already registed`, rule)
return fmt.Errorf(`validation rule "%s" is already registered`, rule)
}
allSupportedRules[rule] = struct{}{}
customRuleFuncMap[rule] = f

View File

@ -250,3 +250,32 @@ func Test_CheckStruct_With_Inherit(t *testing.T) {
t.Assert(err.Maps()["password2"], g.Map{"same": "您两次输入的密码不一致"})
})
}
func Test_CheckStruct_Optional(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
type Params struct {
Page int `v:"required|min:1 #page is required"`
Size int `v:"required|between:1,100#size is required"`
ProjectId string `v:"between:1,10000 #project id must between :min, :max"`
}
obj := &Params{
Page: 1,
Size: 1,
}
err := gvalid.CheckStruct(obj, nil)
t.Assert(err, nil)
})
gtest.C(t, func(t *gtest.T) {
type Params struct {
Page int `v:"required|min:1 #page is required"`
Size int `v:"required|between:1,100#size is required"`
ProjectId int `v:"between:1,10000 #project id must between :min, :max"`
}
obj := &Params{
Page: 1,
Size: 1,
}
err := gvalid.CheckStruct(obj, nil)
t.Assert(err.String(), "project id must between 1, 10000")
})
}