openapi格式的文档基础生成 #3
36
generate.go
36
generate.go
@ -8,6 +8,7 @@
|
|||||||
package api_doc
|
package api_doc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"git.zhangdeman.cn/gateway/api-doc/define"
|
"git.zhangdeman.cn/gateway/api-doc/define"
|
||||||
"git.zhangdeman.cn/zhangdeman/consts"
|
"git.zhangdeman.cn/zhangdeman/consts"
|
||||||
"reflect"
|
"reflect"
|
||||||
@ -169,6 +170,9 @@ func (g *Generate) AddApi(baseCfg *define.UriBaseConfig, paramList []*define.Par
|
|||||||
//
|
//
|
||||||
// Date : 15:25 2025/2/8
|
// Date : 15:25 2025/2/8
|
||||||
func (g *Generate) AddComponentsSchema(pkgPath string, inputType reflect.Type) {
|
func (g *Generate) AddComponentsSchema(pkgPath string, inputType reflect.Type) {
|
||||||
|
if nil == g.docData {
|
||||||
|
g.docData = &define.OpenapiDoc{}
|
||||||
|
}
|
||||||
if nil == g.docData.Components {
|
if nil == g.docData.Components {
|
||||||
g.docData.Components = &define.Components{
|
g.docData.Components = &define.Components{
|
||||||
Schemas: map[string]*define.Schema{},
|
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 {
|
if inputType.Kind() == reflect.Slice || inputType.Kind() == reflect.Array {
|
||||||
inputType.Comparable()
|
g.parseSliceItem(inputType)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
// 结构体
|
// 结构体
|
||||||
if inputType.Kind() == reflect.Struct {
|
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 {
|
type B struct {
|
||||||
List []A `json:"list"`
|
List []A `json:"list"`
|
||||||
}
|
}
|
||||||
var b *B
|
|
||||||
tt := reflect.TypeOf(b)
|
|
||||||
fmt.Println(tt)
|
|
||||||
var bArr []*B
|
var bArr []*B
|
||||||
v := reflect.MakeSlice(reflect.TypeOf(bArr), 1, 1)
|
g := Generate{}
|
||||||
fmt.Println(v)
|
fmt.Println(g.parseSliceItem(reflect.TypeOf(bArr)))
|
||||||
index9 := v.Index(0)
|
|
||||||
fmt.Println(index9, index9.Type())
|
|
||||||
current, _ := user.Current()
|
current, _ := user.Current()
|
||||||
byteData, _ := os.ReadFile(current.HomeDir + "/Downloads/test-openapi-doc.json")
|
byteData, _ := os.ReadFile(current.HomeDir + "/Downloads/test-openapi-doc.json")
|
||||||
var data define.OpenapiDoc
|
var data define.OpenapiDoc
|
||||||
|
Loading…
x
Reference in New Issue
Block a user