From f1c0e473f4d2a0547b0b2d0b132d64b9cb38aae6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Thu, 13 Feb 2025 18:27:31 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E6=9E=90=E6=9E=9A=E4=B8=BE=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- generate.go | 6 +++--- parser_test.go | 2 +- validateRule.go | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/generate.go b/generate.go index 8f969ae..fa44ee6 100644 --- a/generate.go +++ b/generate.go @@ -326,9 +326,6 @@ func (g *Generate) AddComponentsSchema(rootSchemaName string, pkgPath string, in } // g.docData.Components.Schemas[schemaName].Ref = consts.SwaggerDataTypeObject for i := 0; i < inputType.NumField(); i++ { - // 设置参数各种属性 - g.setStructFieldProperty(schemaName, inputType.Field(i)) - if inputType.Field(i).Type.Kind() == reflect.Ptr || inputType.Field(i).Type.Kind() == reflect.Struct || inputType.Field(i).Type.Kind() == reflect.Map || @@ -377,6 +374,8 @@ func (g *Generate) AddComponentsSchema(rootSchemaName string, pkgPath string, in Description: ParseStructField.GetParamDesc(inputType.Field(i)), } } + // 设置参数各种属性 + g.setStructFieldProperty(schemaName, inputType.Field(i)) } return schemaName } @@ -474,4 +473,5 @@ func (g *Generate) setStructFieldProperty(schemaName string, structField reflect if ValidateRule.IsRequired(structField) { g.docData.Components.Schemas[schemaName].Required = append(g.docData.Components.Schemas[schemaName].Required, paramName) } + g.docData.Components.Schemas[schemaName].Properties[ParseStructField.GetParamName(structField)].Enum = ValidateRule.Enum(structField) } diff --git a/parser_test.go b/parser_test.go index edda094..4bac3f7 100644 --- a/parser_test.go +++ b/parser_test.go @@ -25,7 +25,7 @@ import ( func Test_parser_Openapi3(t *testing.T) { type User struct { Name string `json:"name" d:"zhang" desc:"用户姓名" binding:"required"` - Age int `json:"age" d:"18" desc:"年龄" binding:"required"` + Age int `json:"age" d:"18" desc:"年龄" binding:"required,oneof:12 13 18 90"` } type List struct { Total int64 `json:"total" binding:"required"` diff --git a/validateRule.go b/validateRule.go index 92bef26..6a6f868 100644 --- a/validateRule.go +++ b/validateRule.go @@ -31,6 +31,20 @@ func (r validateRule) IsRequired(structField reflect.StructField) bool { return exist } +// Enum 获取枚举值 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:23 2025/2/13 +func (r validateRule) Enum(structField reflect.StructField) []string { + ruleTable := r.getValidateRuleTable(structField) + oneOfValue, _ := ruleTable[consts.ValidatorRuleCommonOneOf.String()] + if len(oneOfValue) == 0 { + return []string{} + } + return strings.Split(oneOfValue, " ") +} + // getValidateRuleTable 解析验证规则表 // // Author : go_developer@163.com<白茶清欢>