地柜解析逻辑

This commit is contained in:
白茶清欢 2025-02-08 22:04:25 +08:00
parent 81975350c1
commit 27f2ccf2aa
2 changed files with 37 additions and 8 deletions

View File

@ -8,6 +8,7 @@
package api_doc
import (
"fmt"
"git.zhangdeman.cn/gateway/api-doc/define"
"git.zhangdeman.cn/zhangdeman/consts"
"reflect"
@ -169,6 +170,9 @@ func (g *Generate) AddApi(baseCfg *define.UriBaseConfig, paramList []*define.Par
//
// Date : 15:25 2025/2/8
func (g *Generate) AddComponentsSchema(pkgPath string, inputType reflect.Type) {
if nil == g.docData {
g.docData = &define.OpenapiDoc{}
}
if nil == g.docData.Components {
g.docData.Components = &define.Components{
Schemas: map[string]*define.Schema{},
@ -198,9 +202,39 @@ func (g *Generate) AddComponentsSchema(pkgPath string, inputType reflect.Type) {
}
// 数组
if inputType.Kind() == reflect.Slice || inputType.Kind() == reflect.Array {
inputType.Comparable()
g.parseSliceItem(inputType)
return
}
// 结构体
if inputType.Kind() == reflect.Struct {
for i := 0; i < inputType.NumField(); i++ {
if inputType.Field(i).Type.Kind() == reflect.Ptr ||
inputType.Field(i).Type.Kind() == reflect.Struct ||
inputType.Field(i).Type.Kind() == reflect.Map ||
inputType.Field(i).Type.Kind() == reflect.Array ||
inputType.Field(i).Type.Kind() == reflect.Slice {
g.AddComponentsSchema(inputType.PkgPath(), inputType.Field(i).Type)
}
fmt.Println(inputType.Field(i).Name)
}
}
}
// parseSliceItem 解析数组每一项
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 21:33 2025/2/8
func (g *Generate) parseSliceItem(inputType reflect.Type) string {
if inputType.Kind() != reflect.Slice && inputType.Kind() != reflect.Array {
// 不是数组
return ""
}
sliceValue := reflect.MakeSlice(inputType, 1, 1)
sliceItemType := sliceValue.Index(0).Type()
g.AddComponentsSchema(sliceItemType.PkgPath(), sliceItemType)
if len(sliceItemType.PkgPath()) == 0 {
return sliceItemType.String()
}
return sliceItemType.PkgPath() + "." + sliceItemType.String()
}

View File

@ -30,14 +30,9 @@ func Test_parser_Openapi3(t *testing.T) {
type B struct {
List []A `json:"list"`
}
var b *B
tt := reflect.TypeOf(b)
fmt.Println(tt)
var bArr []*B
v := reflect.MakeSlice(reflect.TypeOf(bArr), 1, 1)
fmt.Println(v)
index9 := v.Index(0)
fmt.Println(index9, index9.Type())
g := Generate{}
fmt.Println(g.parseSliceItem(reflect.TypeOf(bArr)))
current, _ := user.Current()
byteData, _ := os.ReadFile(current.HomeDir + "/Downloads/test-openapi-doc.json")
var data define.OpenapiDoc