consts/validator.go
2025-01-24 12:35:16 +08:00

236 lines
11 KiB
Go

// Package consts ...
//
// Description : consts ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2025-01-22 16:08
// @see: https://github.com/go-playground/validator/blob/master/README.md#strings
// @demo: https://www.cnblogs.com/zj420255586/p/13542395.html
package consts
type ValidatorRule string // 验证规则
func (vr *ValidatorRule) String() string {
return string(*vr)
}
func (vr *ValidatorRule) MarshalJSON() ([]byte, error) {
return []byte(vr.String()), nil
}
// Config 验证规则的配置
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:10 2025/1/22
func (vr *ValidatorRule) Config() ValidatorRuleConfig {
return ValidatorRuleSupportDataTypeTable[*vr]
}
// IsSupportDataType 是否支持指定的数据类型
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:11 2025/1/22
func (vr *ValidatorRule) IsSupportDataType(dataType DataType) bool {
dataTypeList := vr.Config().SupportDataTypeList
if len(dataTypeList) == 0 {
// 未配置则认为支持
return true
}
for _, dataTypeItem := range dataTypeList {
if dataType.String() == dataTypeItem.String() {
return true
}
}
return false
}
type ValidatorRuleConfig struct {
ValidatorRule ValidatorRule `json:"validator_rule"` // 验证规则
Description string `json:"description"` // 规则描述
SupportDataTypeList []DataType `json:"support_data_type_list"` // 支持的数据类型列表
}
// ValidatorRuleSupportDataTypeTable 验证规则支持的数据类型表
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:13 2025/1/22
var ValidatorRuleSupportDataTypeTable = map[ValidatorRule]ValidatorRuleConfig{
ValidatorRuleEqcsfield: {
ValidatorRule: ValidatorRuleEqcsfield,
Description: "跨结构体字段相等",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
},
ValidatorRuleEqfield: {
ValidatorRule: ValidatorRuleEqfield,
Description: "同结构体字段相等",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
},
ValidatorRuleFieldcontains: {
ValidatorRule: ValidatorRuleFieldcontains,
Description: "检查指定的字段值是否存在于字段中",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString),
},
ValidatorRuleFieldexcludes: {
ValidatorRule: ValidatorRuleFieldexcludes,
Description: "检查指定的字段值是否不存在于字段中",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseString),
},
ValidatorRuleGtcsfield: {
ValidatorRule: ValidatorRuleGtcsfield,
Description: "大于(跨结构体)",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
},
ValidatorRuleGtecsfield: {
ValidatorRule: ValidatorRuleGtecsfield,
Description: "大于(同结构体)",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
},
ValidatorRuleGtfield: {
ValidatorRule: ValidatorRuleGtfield,
Description: "大于(同结构体)",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
},
ValidatorRuleGtefield: {
ValidatorRule: ValidatorRuleGtefield,
Description: "大于(同结构体)",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
},
ValidatorRuleLtcsfield: {
ValidatorRule: ValidatorRuleLtcsfield,
Description: "小于(跨结构体)",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
},
ValidatorRuleLtecsfield: {
ValidatorRule: ValidatorRuleLtecsfield,
Description: "小于等于(跨结构体)",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
},
ValidatorRuleLtfield: {
ValidatorRule: ValidatorRuleLtfield,
Description: "小于(同结构体)",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
},
ValidatorRuleLtefield: {
ValidatorRule: ValidatorRuleLtefield,
Description: "小于等于(同结构体)",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
},
ValidatorRuleNecsfield: {
ValidatorRule: ValidatorRuleNecsfield,
Description: "不等于(跨结构体)",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
},
ValidatorRuleNefield: {
ValidatorRule: ValidatorRuleNefield,
Description: "不等于(同结构体)",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
},
ValidateRuleEq: {
ValidatorRule: ValidateRuleEq,
Description: "等于(严格校验)",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
},
ValidateRuleEqIgnoreCase: {
ValidatorRule: ValidateRuleEqIgnoreCase,
Description: "等于(忽略大小写)",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
},
ValidateRuleGt: {
ValidatorRule: ValidateRuleGt,
Description: "大于",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
},
ValidateRuleGte: {
ValidatorRule: ValidateRuleGte,
Description: "大于等于",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
},
ValidateRuleLt: {
ValidatorRule: ValidateRuleLt,
Description: "小于",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
},
ValidateRuleLte: {
ValidatorRule: ValidateRuleLte,
Description: "小于等于",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber),
},
ValidateRuleNe: {
ValidatorRule: ValidateRuleNe,
Description: "不等于(严格判断)",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
},
ValidateRuleNeIgnoreCase: {
ValidatorRule: ValidateRuleNeIgnoreCase,
Description: "不等于(忽略大小写)",
SupportDataTypeList: getMergeDataTypeList(DataTypeBaseNumber, DataTypeBaseString, DataTypeBaseBool),
},
}
var (
// ValidatorRuleEqcsfield .....Fields ..............
ValidatorRuleEqcsfield ValidatorRule = "eqcsfield" // 跨结构体字段相等
ValidatorRuleEqfield ValidatorRule = "eqfield" // 同结构体字段相等
ValidatorRuleFieldcontains ValidatorRule = "fieldcontains" // 检查指定的字段值是否存在于字段中
ValidatorRuleFieldexcludes ValidatorRule = "fieldexcludes" // 检查指定的字段值是否存在于字段中
ValidatorRuleGtcsfield ValidatorRule = "gtcsfield" // 大于(跨结构体)
ValidatorRuleGtecsfield ValidatorRule = "gtecsfield" // 大于等于(跨结构体)
ValidatorRuleGtfield ValidatorRule = "gtfield" // 大于(同结构体)
ValidatorRuleGtefield ValidatorRule = "gtefield" // 大于等于(同结构体)
ValidatorRuleLtcsfield ValidatorRule = "ltcsfield" // 小于(跨结构体)
ValidatorRuleLtecsfield ValidatorRule = "ltecsfield" // 小于等于(跨结构体)
ValidatorRuleLtfield ValidatorRule = "ltfield" // 小于(同结构体)
ValidatorRuleLtefield ValidatorRule = "ltefield" // 小于等于(同结构体)
ValidatorRuleNecsfield ValidatorRule = "necsfield" // 不等于(跨结构体)
ValidatorRuleNefield ValidatorRule = "nefield" // 不等于(同结构体)
// ValidateRuleEq Comparisons ....................
ValidateRuleEq ValidatorRule = "eq" // 相等(严格判断)
ValidateRuleEqIgnoreCase ValidatorRule = "eq_ignore_case" // 相等(忽略大小写)
ValidateRuleGt ValidatorRule = "gt" // 大于
ValidateRuleGte ValidatorRule = "gte" // 大于等于
ValidateRuleLt ValidatorRule = "lt" // 小于
ValidateRuleLte ValidatorRule = "lte" // 小于等于
ValidateRuleNe ValidatorRule = "ne" // 不相等(严格判断)
ValidateRuleNeIgnoreCase ValidatorRule = "ne_ignore_case" // 不相等(忽略大小写)
// ValidatorRuleCommonDir ............others
ValidatorRuleCommonDir ValidatorRule = "dir" // 文件夹存在
ValidatorRuleCommonDirPath ValidatorRule = "dirpath" // 文件夹路径
ValidatorRuleCommonFile ValidatorRule = "file" // 文件存在
ValidatorRuleCommonFilepath ValidatorRule = "filepath" // 文件路径
ValidatorRuleCommonImage ValidatorRule = "image" // 图像
ValidatorRuleCommonIsDefault ValidatorRule = "isdefault" // 是否默认值
ValidatorRuleCommonLen ValidatorRule = "len" // 长度
ValidatorRuleCommonMax ValidatorRule = "max" // 最大值
ValidatorRuleCommonMin ValidatorRule = "min" // 最小值
ValidatorRuleCommonOneOf ValidatorRule = "oneof" // 枚举值, 多个空格分隔
ValidatorRuleCommonRequired ValidatorRule = "required" // 必传
ValidatorRuleCommonRequiredIf ValidatorRule = "required_if" //
ValidatorRuleCommonRequiredUnless ValidatorRule = "required_unless" //
ValidatorRuleCommonRequiredWith ValidatorRule = "required_with" //
ValidatorRuleCommonRequiredWithAll ValidatorRule = "required_with_all" //
ValidatorRuleCommonRequiredWithout ValidatorRule = "required_without" //
ValidatorRuleCommonRequiredWithoutAll ValidatorRule = "required_without_all" //
ValidatorRuleCommonExcludedIf ValidatorRule = "excluded_if" //
ValidatorRuleCommonExcludedUnless ValidatorRule = "excluded_unless" //
ValidatorRuleCommonExcludedWith ValidatorRule = "excluded_with" //
ValidatorRuleCommonExcludedWithAll ValidatorRule = "excluded_with_all" //
ValidatorRuleCommonExcludedWithout ValidatorRule = "excluded_without" //
ValidatorRuleCommonExcludedWithoutAll ValidatorRule = "excluded_without_all" //
ValidatorRuleCommonUnique ValidatorRule = "unique" //
// ValidatorRuleFormatterCron ............. formatter
ValidatorRuleFormatterCron ValidatorRule = "cron" // cron表达式
ValidatorRuleFormatterEmail ValidatorRule = "email" // 邮件地址
ValidatorRuleFormatterJson ValidatorRule = "json" // json格式
ValidatorRuleFormatterJwt ValidatorRule = "jwt" // JSON Web Token (JWT)
ValidatorRuleFormatterLatitude ValidatorRule = "latitude" // 纬度
ValidatorRuleFormatterLongitude ValidatorRule = "longitude" // 经度
ValidatorRuleFormatterTimezone ValidatorRule = "timezone" // 时区
)