dev
This commit is contained in:
51
internal/plugin/packagegen.go
Normal file
51
internal/plugin/packagegen.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package plugin
|
||||
|
||||
import (
|
||||
"git.apinb.com/bsm-tools/protoc-gen-ts/internal/codegen"
|
||||
"git.apinb.com/bsm-tools/protoc-gen-ts/internal/protowalk"
|
||||
"google.golang.org/protobuf/reflect/protoreflect"
|
||||
)
|
||||
|
||||
type packageGenerator struct {
|
||||
pkg protoreflect.FullName
|
||||
files []protoreflect.FileDescriptor
|
||||
}
|
||||
|
||||
func (p packageGenerator) Generate(f *codegen.File) error {
|
||||
p.generateHeader(f)
|
||||
var seenService bool
|
||||
var walkErr error
|
||||
protowalk.WalkFiles(p.files, func(desc protoreflect.Descriptor) bool {
|
||||
if wkt, ok := WellKnownType(desc); ok {
|
||||
f.P(wkt.TypeDeclaration())
|
||||
return false
|
||||
}
|
||||
switch v := desc.(type) {
|
||||
case protoreflect.MessageDescriptor:
|
||||
if v.IsMapEntry() {
|
||||
return false
|
||||
}
|
||||
messageGenerator{pkg: p.pkg, message: v}.Generate(f)
|
||||
case protoreflect.EnumDescriptor:
|
||||
enumGenerator{pkg: p.pkg, enum: v}.Generate(f)
|
||||
case protoreflect.ServiceDescriptor:
|
||||
if err := (serviceGenerator{pkg: p.pkg, service: v, genHandler: !seenService}).Generate(f); err != nil {
|
||||
walkErr = err
|
||||
return false
|
||||
}
|
||||
seenService = true
|
||||
}
|
||||
return true
|
||||
})
|
||||
if walkErr != nil {
|
||||
return walkErr
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p packageGenerator) generateHeader(f *codegen.File) {
|
||||
f.P("// Code generated by protoc-gen-typescript-http. DO NOT EDIT.")
|
||||
f.P("/* eslint-disable camelcase */")
|
||||
f.P("// @ts-nocheck")
|
||||
f.P()
|
||||
}
|
||||
Reference in New Issue
Block a user