匿名字段处理, 待完善

This commit is contained in:
白茶清欢 2025-02-17 18:56:48 +08:00
parent 6449c7399f
commit f6810bafbd

View File

@ -326,6 +326,10 @@ func (g *Generate) ParseReadConfigParam(requestCfg *define.UriBaseConfig, baseRe
baseReqCfg.Parameters = make([]*define.PathConfigParameter, 0)
}
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))
if propertyName == "-" {
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.Elem().Kind() == reflect.Struct {
// 结构体指针
schemaNameNext := g.AddComponentsSchema("", propertyName, inputType.Field(i).Type.Elem())
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 {
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))
if propertyName == "-" {
continue
@ -580,6 +590,42 @@ func (g *Generate) AddComponentsSchema(rootSchemaName string, pkgPath string, in
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 解析数组每一项
//
// Author : go_developer@163.com<白茶清欢>