54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
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()
|
|
}
|