瀏覽代碼

feat: 新增json版本的生成

dcsunny 1 年之前
父節點
當前提交
c0ed21651d
共有 3 個文件被更改,包括 37 次插入17 次删除
  1. 1 1
      go.mod
  2. 2 0
      go.sum
  3. 34 16
      service.go

+ 1 - 1
go.mod

@@ -3,7 +3,7 @@ module git.ikuban.com/server/swagger-api
 go 1.22.1
 
 require (
-	git.ikuban.com/server/gnostic v0.0.0-20240530012907-80ffc2e6ca93
+	git.ikuban.com/server/gnostic v0.0.0-20240530063106-f9a918014ef8
 	github.com/go-kratos/kratos/v2 v2.7.3
 	github.com/gorilla/mux v1.8.1
 	github.com/xmkuban/utils v0.0.12

+ 2 - 0
go.sum

@@ -595,6 +595,8 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7
 gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8=
 git.ikuban.com/server/gnostic v0.0.0-20240530012907-80ffc2e6ca93 h1:mE3Gde3W5Y/HfH03rAo/EotgEG4jJqZQoR6q/DwS2zA=
 git.ikuban.com/server/gnostic v0.0.0-20240530012907-80ffc2e6ca93/go.mod h1:s13LfeZt1veCF59BOzdUwRDGrj1hiFv8O6i+orAx5H4=
+git.ikuban.com/server/gnostic v0.0.0-20240530063106-f9a918014ef8 h1:b5/wMeCuOuxAcQeh3fJLlT20vTRfdG9R1/3sUpOiVFY=
+git.ikuban.com/server/gnostic v0.0.0-20240530063106-f9a918014ef8/go.mod h1:s13LfeZt1veCF59BOzdUwRDGrj1hiFv8O6i+orAx5H4=
 git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=

+ 34 - 16
service.go

@@ -4,6 +4,7 @@ import (
 	"context"
 	"fmt"
 	//"git.ikuban.com/server/swagger-api/protoc-gen-openapiv2/generator"
+	generatorJson "git.ikuban.com/server/gnostic/protoc-gen-jsonschema/generator"
 	"git.ikuban.com/server/gnostic/protoc-gen-openapi/generator"
 	"github.com/go-kratos/kratos/v2/api/metadata"
 	"github.com/xmkuban/utils/utils"
@@ -15,14 +16,18 @@ import (
 
 // Service is service
 type Service struct {
-	ser            *metadata.Server
-	serviceInfoMap map[string]grpc.ServiceInfo
+	ser     *metadata.Server
+	outType string
 }
 
 // New service
-func New(srv *grpc.Server) *Service {
+func New(srv *grpc.Server, outType string) *Service {
+	if outType == "" {
+		outType = "yaml"
+	}
 	return &Service{
-		ser: metadata.NewServer(srv),
+		ser:     metadata.NewServer(srv),
+		outType: outType,
 	}
 }
 
@@ -68,18 +73,31 @@ func (s *Service) GetServiceOpenAPI(ctx context.Context, in *metadata.GetService
 		return "", err
 	}
 	plugin.SupportedFeatures = uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL)
-	gen := generator.NewOpenAPIv3Generator(plugin, generator.Configuration{
-		Version:         utils.ToPointString("1.0"),
-		Title:           utils.ToPointString(""),
-		Description:     utils.ToPointString(""),
-		Naming:          utils.ToPointString("json"),
-		FQSchemaNaming:  utils.ToPointBool(true),
-		EnumType:        utils.ToPointString("integer"),
-		CircularDepth:   utils.ToPointInt(2),
-		DefaultResponse: utils.ToPointBool(false),
-		OutputMode:      utils.ToPointString("merged"),
-	}, plugin.Files)
-	content, err := gen.RunV2()
+
+	var content []byte
+	if s.outType == "yaml" {
+		gen := generator.NewOpenAPIv3Generator(plugin, generator.Configuration{
+			Version:         utils.ToPointString("1.0"),
+			Title:           utils.ToPointString(""),
+			Description:     utils.ToPointString(""),
+			Naming:          utils.ToPointString("json"),
+			FQSchemaNaming:  utils.ToPointBool(true),
+			EnumType:        utils.ToPointString("integer"),
+			CircularDepth:   utils.ToPointInt(2),
+			DefaultResponse: utils.ToPointBool(false),
+			OutputMode:      utils.ToPointString("merged"),
+		}, plugin.Files)
+		content, err = gen.RunV2()
+	} else {
+		gen := generatorJson.NewJSONSchemaGenerator(plugin, generatorJson.Configuration{
+			BaseURL:  utils.ToPointString(""),
+			Version:  utils.ToPointString("1.0"),
+			Naming:   utils.ToPointString("json"),
+			EnumType: utils.ToPointString("integer"),
+		})
+		content, err = gen.RunV2()
+	}
+
 	if err != nil {
 		return "", err
 	}