地柜解析逻辑
This commit is contained in:
parent
81975350c1
commit
27f2ccf2aa
36
generate.go
36
generate.go
@ -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()
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user