| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | package generatorimport (	"git.ikuban.com/server/swagger-api/protoc-gen-openapiv2/internal/codegenerator"	"git.ikuban.com/server/swagger-api/protoc-gen-openapiv2/internal/descriptor"	"git.ikuban.com/server/swagger-api/protoc-gen-openapiv2/internal/genopenapi"	"google.golang.org/protobuf/types/pluginpb")// Generator is openapi v2 generatortype Generator struct {	reg *descriptor.Registry}// NewGenerator return Generatorfunc NewGenerator(options ...Option) *Generator {	gen := &Generator{		reg: descriptor.NewRegistry(),	}	gen.reg.SetUseJSONNamesForFields(true)	gen.reg.SetRecursiveDepth(1024)	gen.reg.SetMergeFileName("apidocs")	gen.reg.SetDisableDefaultErrors(true)	for _, o := range options {		o(gen)	}	return gen}// Gen generates openapi v2 json contentfunc (g *Generator) Gen(req *pluginpb.CodeGeneratorRequest, onlyRPC bool) (*pluginpb.CodeGeneratorResponse, error) {	reg := g.reg	if reg == nil {		reg = NewGenerator().reg	}	reg.SetGenerateRPCMethods(onlyRPC)	if err := reg.SetRepeatedPathParamSeparator("csv"); err != nil {		return nil, err	}	gen := genopenapi.New(reg)	if err := genopenapi.AddErrorDefs(reg); err != nil {		return nil, err	}	if err := reg.Load(req); err != nil {		return nil, err	}	var targets []*descriptor.File	for _, target := range req.FileToGenerate {		f, err := reg.LookupFile(target)		if err != nil {			return nil, err		}		targets = append(targets, f)	}	out, err := gen.Generate(targets)	if err != nil {		return nil, err	}	return emitFiles(out), nil}func emitFiles(out []*descriptor.ResponseFile) *pluginpb.CodeGeneratorResponse {	files := make([]*pluginpb.CodeGeneratorResponse_File, len(out))	for idx, item := range out {		files[idx] = item.CodeGeneratorResponse_File	}	resp := &pluginpb.CodeGeneratorResponse{File: files}	codegenerator.SetSupportedFeaturesOnCodeGeneratorResponse(resp)	return resp}
 |