匿名字段处理, 待完善
This commit is contained in:
parent
6449c7399f
commit
f6810bafbd
46
generate.go
46
generate.go
@ -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<白茶清欢>
|
||||
|
Loading…
x
Reference in New Issue
Block a user