支持匿名字段 #9

Merged
zhangdeman merged 7 commits from feature/fix_base_arr_anonymity_struct into master 2025-02-18 14:07:25 +08:00
Showing only changes of commit f6810bafbd - Show all commits

View File

@ -326,6 +326,10 @@ func (g *Generate) ParseReadConfigParam(requestCfg *define.UriBaseConfig, baseRe
baseReqCfg.Parameters = make([]*define.PathConfigParameter, 0) baseReqCfg.Parameters = make([]*define.PathConfigParameter, 0)
} }
for i := 0; i < inputType.NumField(); i++ { for i := 0; i < inputType.NumField(); i++ {
if inputType.Field(i).Anonymous {
// 匿名字段, 直接对齐到当前的父级
g.ParseReadConfigParam(requestCfg, baseReqCfg, inputType.Field(i).Type)
}
propertyName := ParseStructField.GetParamName(inputType.Field(i)) propertyName := ParseStructField.GetParamName(inputType.Field(i))
if propertyName == "-" { if propertyName == "-" {
continue continue
@ -342,6 +346,7 @@ func (g *Generate) ParseReadConfigParam(requestCfg *define.UriBaseConfig, baseRe
if inputType.Field(i).Type.Kind() == reflect.Ptr { if inputType.Field(i).Type.Kind() == reflect.Ptr {
// 处理指针 // 处理指针
if inputType.Field(i).Type.Elem().Kind() == reflect.Struct { if inputType.Field(i).Type.Elem().Kind() == reflect.Struct {
// 结构体指针 // 结构体指针
schemaNameNext := g.AddComponentsSchema("", propertyName, inputType.Field(i).Type.Elem()) schemaNameNext := g.AddComponentsSchema("", propertyName, inputType.Field(i).Type.Elem())
baseReqCfg.Parameters = append(baseReqCfg.Parameters, &define.PathConfigParameter{ baseReqCfg.Parameters = append(baseReqCfg.Parameters, &define.PathConfigParameter{
@ -500,6 +505,11 @@ func (g *Generate) AddComponentsSchema(rootSchemaName string, pkgPath string, in
// 结构体 // 结构体
if inputType.Kind() == reflect.Struct { if inputType.Kind() == reflect.Struct {
for i := 0; i < inputType.NumField(); i++ { for i := 0; i < inputType.NumField(); i++ {
if inputType.Field(i).Anonymous {
// 处理匿名字段
g.handleAnonymousField(schemaName, inputType.Field(i))
continue
}
propertyName := ParseStructField.GetParamName(inputType.Field(i)) propertyName := ParseStructField.GetParamName(inputType.Field(i))
if propertyName == "-" { if propertyName == "-" {
continue continue
@ -580,6 +590,42 @@ func (g *Generate) AddComponentsSchema(rootSchemaName string, pkgPath string, in
return schemaName return schemaName
} }
// handleAnonymousField 处理匿名字段
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 18:43 2025/2/17
func (g *Generate) handleAnonymousField(schemaName string, field reflect.StructField) {
if !field.Anonymous {
// 不是匿名字段
return
}
handleType := field.Type
if handleType.Kind() == reflect.Ptr {
handleType = handleType.Elem()
}
for i := 0; i < handleType.NumField(); i++ {
if handleType.Field(i).Anonymous {
// 地柜处理多层嵌套匿名字段
g.handleAnonymousField(schemaName, handleType.Field(i))
continue
} else {
if handleType.Kind() == reflect.Map || handleType.Kind() == reflect.Slice || handleType.Kind() == reflect.Array || handleType.Kind() == reflect.Struct || handleType.Kind() == reflect.Ptr {
g.AddComponentsSchema(schemaName, handleType.Field(i).Type.PkgPath(), handleType.Field(i).Type)
continue
} else {
g.docData.Components.Schemas[schemaName].Properties[ParseStructField.GetParamName(handleType.Field(i))] = &define.Property{
Type: g.realBaseType2SwaggerType(handleType.Field(i).Type.String()),
Format: handleType.Field(i).Type.String(),
Enum: ValidateRule.Enum(handleType.Field(i)),
Default: ParseStructField.GetDefaultValue(handleType.Field(i)),
Description: ParseStructField.GetParamDesc(handleType.Field(i)),
}
}
}
}
}
// parseSliceItem 解析数组每一项 // parseSliceItem 解析数组每一项
// //
// Author : go_developer@163.com<白茶清欢> // Author : go_developer@163.com<白茶清欢>