Rainbond/util/govalidator/custom_rules.go

34 lines
922 B
Go
Raw Normal View History

2020-09-06 11:11:11 +08:00
package validator
import (
"fmt"
"net/url"
"strings"
)
var customRules = make(map[string]func(string, interface{}, string) error, 0)
// AddCustomRule help to add custom rules for validator
// First argument it takes the rule name and second arg a func
// Second arg must have this signature below
// fn func(fieldName string, fieldValue string, rule string) error
func AddCustomRule(name string, fn func(field string, value interface{}, rule string) error) {
if isRuleExist(name) {
panic(fmt.Errorf("validator: %s is already defined in rules", name))
}
customRules[name] = fn
}
// validateCustomRules validate custom rules
func validateCustomRules(field string, value interface{}, rule string, errsBag url.Values) {
for k, v := range customRules {
if k == rule || strings.HasPrefix(rule, k+":") {
err := v(field, value, rule)
if err != nil {
errsBag.Add(field, err.Error())
}
break
}
}
}