1 Star 0 Fork 1

go-genie/httptransport

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
validations.go 3.19 KB
一键复制 编辑 原始数据 按行查看 历史
文兄 提交于 2024-02-20 16:35 . 1
package openapi
import (
"context"
"go/types"
"gitee.com/go-genie/httptransport/validator"
"gitee.com/go-genie/oas"
"gitee.com/go-genie/xx/ptr"
typesutil "gitee.com/go-genie/xx/types"
)
func BindSchemaValidationByValidateBytes(s *oas.Schema, typ types.Type, validateBytes []byte) error {
ttype := typesutil.FromTType(typ)
fieldValidator, err := validator.ValidatorMgrDefault.Compile(
context.Background(), validateBytes, ttype, func(rule validator.RuleModifier) {
rule.SetDefaultValue(nil)
},
)
if err != nil {
return err
}
if fieldValidator != nil {
BindSchemaValidationByValidator(s, fieldValidator)
}
return nil
}
func BindSchemaValidationByValidator(s *oas.Schema, v validator.Validator) {
if validatorLoader, ok := v.(*validator.ValidatorLoader); ok {
v = validatorLoader.Validator
}
if s == nil {
*s = oas.Schema{}
}
switch vt := v.(type) {
case *validator.UintValidator:
if len(vt.Enums) > 0 {
for _, v := range vt.Enums {
s.Enum = append(s.Enum, v)
}
return
}
s.Minimum = ptr.Float64(float64(vt.Minimum))
s.Maximum = ptr.Float64(float64(vt.Maximum))
s.ExclusiveMinimum = vt.ExclusiveMinimum
s.ExclusiveMaximum = vt.ExclusiveMaximum
if vt.MultipleOf > 0 {
s.MultipleOf = ptr.Float64(float64(vt.MultipleOf))
}
case *validator.IntValidator:
if len(vt.Enums) > 0 {
for _, v := range vt.Enums {
s.Enum = append(s.Enum, v)
}
return
}
if vt.Minimum != nil {
s.Minimum = ptr.Float64(float64(*vt.Minimum))
}
if vt.Maximum != nil {
s.Maximum = ptr.Float64(float64(*vt.Maximum))
}
s.ExclusiveMinimum = vt.ExclusiveMinimum
s.ExclusiveMaximum = vt.ExclusiveMaximum
if vt.MultipleOf > 0 {
s.MultipleOf = ptr.Float64(float64(vt.MultipleOf))
}
case *validator.FloatValidator:
if len(vt.Enums) > 0 {
for _, v := range vt.Enums {
s.Enum = append(s.Enum, v)
}
return
}
if vt.Minimum != nil {
s.Minimum = ptr.Float64(float64(*vt.Minimum))
}
if vt.Maximum != nil {
s.Maximum = ptr.Float64(float64(*vt.Maximum))
}
s.ExclusiveMinimum = vt.ExclusiveMinimum
s.ExclusiveMaximum = vt.ExclusiveMaximum
if vt.MultipleOf > 0 {
s.MultipleOf = ptr.Float64(float64(vt.MultipleOf))
}
case *validator.StrfmtValidator:
s.Type = oas.TypeString // force to type string for TextMarshaler
s.Format = vt.Names()[0]
case *validator.StringValidator:
s.Type = oas.TypeString // force to type string for TextMarshaler
if len(vt.Enums) > 0 {
for _, v := range vt.Enums {
s.Enum = append(s.Enum, v)
}
return
}
s.MinLength = ptr.Uint64(vt.MinLength)
if vt.MaxLength != nil {
s.MaxLength = ptr.Uint64(*vt.MaxLength)
}
if vt.Pattern != "" {
s.Pattern = vt.Pattern
}
case *validator.SliceValidator:
s.MinItems = ptr.Uint64(vt.MinItems)
if vt.MaxItems != nil {
s.MaxItems = ptr.Uint64(*vt.MaxItems)
}
if vt.ElemValidator != nil {
BindSchemaValidationByValidator(s.Items, vt.ElemValidator)
}
case *validator.MapValidator:
s.MinProperties = ptr.Uint64(vt.MinProperties)
if vt.MaxProperties != nil {
s.MaxProperties = ptr.Uint64(*vt.MaxProperties)
}
if vt.ElemValidator != nil {
BindSchemaValidationByValidator(s.AdditionalProperties.Schema, vt.ElemValidator)
}
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/go-genie/httptransport.git
git@gitee.com:go-genie/httptransport.git
go-genie
httptransport
httptransport
v1.0.5

搜索帮助