validator/v10/default.go

83 lines
3.0 KiB
Go
Raw Permalink Normal View History

// Package v10 ...
//
// Description : v10 ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2025-01-24 10:32
package v10
import (
"errors"
"fmt"
2025-01-24 11:36:45 +08:00
"git.zhangdeman.cn/gateway/validator/v10/define"
"strings"
)
// DefaultValidateRuleGenerateFunc 验证规则生成的默认方法
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 10:33 2025/1/24
2025-01-24 11:36:45 +08:00
func DefaultValidateRuleGenerateFunc(validateRule define.GenerateRuleExpressConfig) (express string, err error) {
ruleConfig := validateRule.Rule.Config()
if len(ruleConfig.ValidatorRule.String()) == 0 {
2025-01-24 15:49:15 +08:00
return "", define.ErrValidatorRuleIsEmpty
}
if ruleConfig.WithoutParam {
// 验证规则不需要任何参数, 舍弃参数
return ruleConfig.ValidatorRule.String(), nil
}
// 验证参数数量
if ruleConfig.MinParamCnt > 0 && len(validateRule.ParamList) < ruleConfig.MinParamCnt {
2025-01-24 15:49:15 +08:00
return "", errors.New(ruleConfig.ValidatorRule.String() + " : " + define.ErrValidatorRuleParamCntIsTooLess.Error() + "-> " + fmt.Sprintf("%v", ruleConfig.MinParamCnt))
}
if ruleConfig.MaxParamCnt > 0 && len(validateRule.ParamList) > ruleConfig.MaxParamCnt {
2025-01-24 15:49:15 +08:00
return "", errors.New(ruleConfig.ValidatorRule.String() + " :" + define.ErrValidatorRuleParamCntIsTooMore.Error() + " -> " + fmt.Sprintf("%v", ruleConfig.MaxParamCnt))
}
if ruleConfig.ParamCntMustEven && len(validateRule.ParamList)%2 != 0 {
2025-01-24 15:49:15 +08:00
return "", errors.New(ruleConfig.ValidatorRule.String() + " : " + define.ErrValidatorRuleParamCntIsNotEven.Error())
}
paramStrList := make([]string, 0)
2025-01-24 11:36:45 +08:00
for _, param := range validateRule.ParamList {
paramStrList = append(paramStrList, fmt.Sprintf("%v", param))
}
return ruleConfig.ValidatorRule.String() + "=" + strings.Join(paramStrList, " "), nil
}
// DefaultFieldValidateRuleGenerateFunc 字段验证表达式生成
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 11:44 2025/1/24
func DefaultFieldValidateRuleGenerateFunc(fieldValidateRule define.FieldValidateGenerateConfig) (string, error) {
fieldValidateRule.Field = strings.TrimSpace(fieldValidateRule.Field)
if len(fieldValidateRule.Field) == 0 {
return "", define.ErrValidatorRuleFieldIsEmpty
}
if len(fieldValidateRule.RuleGroup) == 0 && len(fieldValidateRule.RuleSimple.Rule.String()) == 0 {
2025-01-24 15:49:15 +08:00
return "", define.ErrValidatorRuleGroupOrSimpleRuleAllEmpty
}
if len(fieldValidateRule.RuleGroup) == 0 {
// note: 当 fieldValidateRule.RuleGroup 不为空时, 会忽略 fieldValidateRule.RuleSimple 配置
fieldValidateRule.RuleGroup = [][]define.GenerateRuleExpressConfig{
[]define.GenerateRuleExpressConfig{
fieldValidateRule.RuleSimple,
},
}
}
finalExpressList := make([]string, 0)
for _, itemGroupList := range fieldValidateRule.RuleGroup {
expressList := make([]string, 0)
for _, itemRule := range itemGroupList {
if fieldExpress, err := validatorRuleExpressGenerateFunc(itemRule); nil != err {
return "", err
} else {
expressList = append(expressList, fieldExpress)
}
}
finalExpressList = append(finalExpressList, strings.Join(expressList, ","))
}
return strings.Join(finalExpressList, "|"), nil
}