fixes for standalone mode

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
Василий Толстов 2023-07-31 00:54:44 +03:00
parent 9cc9e19e0b
commit 9bad6b85f3
5 changed files with 31 additions and 13 deletions

View File

@ -38,12 +38,15 @@ func (g *Generator) httpGenerate(component string, plugin *protogen.Plugin, genC
} }
for _, service := range file.Services { for _, service := range file.Services {
g.generateServiceEndpoints(gfile, service, component)
if genClient { if genClient {
g.generateServiceClient(gfile, file, service)
g.generateServiceClientMethods(gfile, service, component) g.generateServiceClientMethods(gfile, service, component)
} }
if genServer { if genServer {
g.generateServiceServer(gfile, file, service)
g.generateServiceServerMethods(gfile, service) g.generateServiceServerMethods(gfile, service)
g.generateServiceRegister(gfile, service, component) g.generateServiceRegister(gfile, file, service, component)
} }
} }
} }

View File

@ -63,8 +63,8 @@ func (g *Generator) Generate(plugin *protogen.Plugin) error {
g.reflection = *flagReflection g.reflection = *flagReflection
plugin.SupportedFeatures = uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL) plugin.SupportedFeatures = uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL)
var genClient bool genClient := true
var genServer bool genServer := true
var genNone bool var genNone bool
if strings.Contains(g.components, "server") { if strings.Contains(g.components, "server") {

View File

@ -40,14 +40,11 @@ func (g *Generator) microGenerate(component string, plugin *protogen.Plugin, gen
// generate services // generate services
for _, service := range file.Services { for _, service := range file.Services {
g.generateServiceName(gfile, service) g.generateServiceName(gfile, service)
g.generateServiceEndpoints(gfile, service, component)
if genClient { if genClient {
g.generateServiceClient(gfile, service)
g.generateServiceClientInterface(gfile, service) g.generateServiceClientInterface(gfile, service)
g.generateServiceClientStreamInterface(gfile, service) g.generateServiceClientStreamInterface(gfile, service)
} }
if genServer { if genServer {
g.generateServiceServer(gfile, service)
g.generateServiceServerInterface(gfile, service) g.generateServiceServerInterface(gfile, service)
g.generateServiceServerStreamInterface(gfile, service) g.generateServiceServerStreamInterface(gfile, service)
} }

4
rpc.go
View File

@ -37,11 +37,13 @@ func (g *Generator) rpcGenerate(component string, plugin *protogen.Plugin, genCl
} }
for _, service := range file.Services { for _, service := range file.Services {
if genClient { if genClient {
g.generateServiceClient(gfile, file, service)
g.generateServiceClientMethods(gfile, service, component) g.generateServiceClientMethods(gfile, service, component)
} }
if genServer { if genServer {
g.generateServiceServer(gfile, file, service)
g.generateServiceServerMethods(gfile, service) g.generateServiceServerMethods(gfile, service)
g.generateServiceRegister(gfile, service, component) g.generateServiceRegister(gfile, file, service, component)
} }
if component == "grpc" && g.reflection { if component == "grpc" && g.reflection {
g.generateServiceDesc(gfile, file, service) g.generateServiceDesc(gfile, file, service)

22
util.go
View File

@ -31,7 +31,7 @@ func unexport(s string) string {
return strings.ToLower(s[:1]) + s[1:] return strings.ToLower(s[:1]) + s[1:]
} }
func (g *Generator) generateServiceClient(gfile *protogen.GeneratedFile, service *protogen.Service) { func (g *Generator) generateServiceClient(gfile *protogen.GeneratedFile, file *protogen.File, service *protogen.Service) {
serviceName := service.GoName serviceName := service.GoName
// if rule, ok := getMicroApiService(service); ok { // if rule, ok := getMicroApiService(service); ok {
// gfile.P("// client wrappers ", strings.Join(rule.ClientWrappers, ", ")) // gfile.P("// client wrappers ", strings.Join(rule.ClientWrappers, ", "))
@ -41,7 +41,11 @@ func (g *Generator) generateServiceClient(gfile *protogen.GeneratedFile, service
gfile.P("name string") gfile.P("name string")
gfile.P("}") gfile.P("}")
if g.standalone {
gfile.P("func New", serviceName, "Client(name string, c ", microClientPackage.Ident("Client"), ") ", file.GoImportPath.Ident(serviceName), "Client {")
} else {
gfile.P("func New", serviceName, "Client(name string, c ", microClientPackage.Ident("Client"), ") ", serviceName, "Client {") gfile.P("func New", serviceName, "Client(name string, c ", microClientPackage.Ident("Client"), ") ", serviceName, "Client {")
}
gfile.P("return &", unexport(serviceName), "Client{c: c, name: name}") gfile.P("return &", unexport(serviceName), "Client{c: c, name: name}")
gfile.P("}") gfile.P("}")
gfile.P() gfile.P()
@ -319,10 +323,14 @@ func (g *Generator) generateServiceClientMethods(gfile *protogen.GeneratedFile,
} }
} }
func (g *Generator) generateServiceServer(gfile *protogen.GeneratedFile, service *protogen.Service) { func (g *Generator) generateServiceServer(gfile *protogen.GeneratedFile, file *protogen.File, service *protogen.Service) {
serviceName := service.GoName serviceName := service.GoName
gfile.P("type ", unexport(serviceName), "Server struct {") gfile.P("type ", unexport(serviceName), "Server struct {")
if g.standalone {
gfile.P(file.GoImportPath.Ident(serviceName), "Server")
} else {
gfile.P(serviceName, "Server") gfile.P(serviceName, "Server")
}
gfile.P("}") gfile.P("}")
gfile.P() gfile.P()
} }
@ -477,9 +485,13 @@ func (g *Generator) generateServiceServerMethods(gfile *protogen.GeneratedFile,
} }
} }
func (g *Generator) generateServiceRegister(gfile *protogen.GeneratedFile, service *protogen.Service, component string) { func (g *Generator) generateServiceRegister(gfile *protogen.GeneratedFile, file *protogen.File, service *protogen.Service, component string) {
serviceName := service.GoName serviceName := service.GoName
if g.standalone {
gfile.P("func Register", serviceName, "Server(s ", microServerPackage.Ident("Server"), ", sh ", file.GoImportPath.Ident(serviceName), "Server, opts ...", microServerPackage.Ident("HandlerOption"), ") error {")
} else {
gfile.P("func Register", serviceName, "Server(s ", microServerPackage.Ident("Server"), ", sh ", serviceName, "Server, opts ...", microServerPackage.Ident("HandlerOption"), ") error {") gfile.P("func Register", serviceName, "Server(s ", microServerPackage.Ident("Server"), ", sh ", serviceName, "Server, opts ...", microServerPackage.Ident("HandlerOption"), ") error {")
}
gfile.P("type ", unexport(serviceName), " interface {") gfile.P("type ", unexport(serviceName), " interface {")
for _, method := range service.Methods { for _, method := range service.Methods {
generateServerSignature(gfile, serviceName, method, true) generateServerSignature(gfile, serviceName, method, true)
@ -491,7 +503,11 @@ func (g *Generator) generateServiceRegister(gfile *protogen.GeneratedFile, servi
gfile.P("h := &", unexport(serviceName), "Server{sh}") gfile.P("h := &", unexport(serviceName), "Server{sh}")
gfile.P("var nopts []", microServerPackage.Ident("HandlerOption")) gfile.P("var nopts []", microServerPackage.Ident("HandlerOption"))
if component == "http" { if component == "http" {
// if g.standalone {
// gfile.P("nopts = append(nopts, ", microServerHttpPackage.Ident("HandlerEndpoints"), "(", file.GoImportPath.Ident(serviceName), "ServerEndpoints))")
// } else {
gfile.P("nopts = append(nopts, ", microServerHttpPackage.Ident("HandlerEndpoints"), "(", serviceName, "ServerEndpoints))") gfile.P("nopts = append(nopts, ", microServerHttpPackage.Ident("HandlerEndpoints"), "(", serviceName, "ServerEndpoints))")
// }
} }
gfile.P("return s.Handle(s.NewHandler(&", serviceName, "{h}, append(nopts, opts...)...))") gfile.P("return s.Handle(s.NewHandler(&", serviceName, "{h}, append(nopts, opts...)...))")
gfile.P("}") gfile.P("}")