代码拉取完成,页面将自动刷新
// 版权归GoFrame作者(https://goframe.org)所有。保留所有权利。
//
// 本源代码形式受MIT许可证条款约束。
// 如果未随本文件一同分发MIT许可证副本,
// 您可以在https://github.com/gogf/gf处获取。
// md5:a9832f33b234e3f3
package builtin
import (
"errors"
"fmt"
"reflect"
gcode "gitee.com/go_888/goframe/errors/gcode"
gerror "gitee.com/go_888/goframe/errors/gerror"
"gitee.com/go_888/goframe/internal/json"
gstr "gitee.com/go_888/goframe/text/gstr"
gconv "gitee.com/go_888/goframe/util/gconv"
"gitee.com/go_888/goframe/util/gtag"
)
// RuleEnums 实现了 `enums` 规则:
// 值应在其常量类型的枚举值中。
//
// 格式:enums
// md5:e45f74add2129f75
type RuleEnums struct{}
func init() {
Register(RuleEnums{})
}
func (r RuleEnums) Name() string {
return "enums"
}
func (r RuleEnums) Message() string {
return "{field}的值`{value}`应该在枚举值中: {enums}"
}
func (r RuleEnums) Run(in RunInput) error {
if in.ValueType == nil {
return gerror.X创建错误码(
gcode.X变量_CodeInvalidParameter,
`使用验证规则'enums'时,值类型不能为空`,
)
}
var (
pkgPath = in.ValueType.PkgPath()
typeName = in.ValueType.Name()
)
if in.ValueType.Kind() == reflect.Slice {
pkgPath = in.ValueType.Elem().PkgPath()
typeName = in.ValueType.Elem().Name()
}
if pkgPath == "" {
return gerror.X创建错误码并格式化(
gcode.X变量_CodeInvalidOperation,
`未找到类型 "%s" 的包路径`,
in.ValueType.String(),
)
}
var (
typeId = fmt.Sprintf(`%s.%s`, pkgPath, typeName)
tagEnums = gtag.GetEnumsByType(typeId)
)
if tagEnums == "" {
return gerror.X创建错误码并格式化(
gcode.X变量_CodeInvalidOperation,
`未找到类型 "%s" 的枚举值,是否缺少使用命令 "gf gen enums"?`,
typeId,
)
}
var enumsValues = make([]interface{}, 0)
if err := json.Unmarshal([]byte(tagEnums), &enumsValues); err != nil {
return err
}
if !gstr.X数组是否存在(gconv.X取文本数组(enumsValues), in.Value.String()) {
return errors.New(gstr.X替换(
in.Message, `{enums}`, tagEnums,
))
}
return nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。