From ceed73403bdb61387d04be8b47183e9c4a970749 Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Tue, 23 Jun 2020 14:10:53 +0200 Subject: Fix codec fallback and generate type imports Change-Id: Idd76c7f19d952939caf153928ac60175845078ff Signed-off-by: Ondrej Fabry --- binapigen/generate_rpc.go | 49 +++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 17 deletions(-) (limited to 'binapigen/generate_rpc.go') diff --git a/binapigen/generate_rpc.go b/binapigen/generate_rpc.go index b480f4a..4beec04 100644 --- a/binapigen/generate_rpc.go +++ b/binapigen/generate_rpc.go @@ -20,17 +20,31 @@ import ( "strings" ) -func generatePackageRPC(ctx *GenFile, w io.Writer) { +// generated service names +const ( + serviceApiName = "RPCService" // name for the RPC service interface + serviceImplName = "serviceClient" // name for the RPC service implementation + serviceClientName = "ServiceClient" // name for the RPC service client + + // TODO: register service descriptor + //serviceDescType = "ServiceDesc" // name for service descriptor type + //serviceDescName = "_ServiceRPC_serviceDesc" // name for service descriptor var +) + +func generateFileRPC(ctx *GenFile, w io.Writer) { logf("----------------------------") - logf("generating RPC package: %q", ctx.file.PackageName) + logf("generating RPC file package: %q", ctx.file.PackageName) logf("----------------------------") + // generate file header fmt.Fprintln(w, "// Code generated by GoVPP's binapi-generator. DO NOT EDIT.") fmt.Fprintln(w) + // generate package header fmt.Fprintf(w, "package %s\n", ctx.file.PackageName) fmt.Fprintln(w) + // generate imports fmt.Fprintln(w, "import (") fmt.Fprintln(w, ` "context"`) fmt.Fprintln(w, ` "io"`) @@ -39,9 +53,9 @@ func generatePackageRPC(ctx *GenFile, w io.Writer) { fmt.Fprintln(w, ")") fmt.Fprintln(w) - // generate services + // generate RPC service if ctx.file.Service != nil && len(ctx.file.Service.RPCs) > 0 { - generateServiceMethods(ctx, w, ctx.file.Service.RPCs) + generateService(ctx, w, ctx.file.Service) } // generate message registrations @@ -50,6 +64,7 @@ func generatePackageRPC(ctx *GenFile, w io.Writer) { fmt.Fprintln(w, "}") fmt.Fprintln(w)*/ + // generate import refs fmt.Fprintf(w, "// Reference imports to suppress errors if they are not otherwise used.\n") fmt.Fprintf(w, "var _ = api.RegisterMessage\n") fmt.Fprintf(w, "var _ = context.Background\n") @@ -57,14 +72,14 @@ func generatePackageRPC(ctx *GenFile, w io.Writer) { } -func generateServiceMethods(ctx *GenFile, w io.Writer, methods []RPC) { +func generateService(ctx *GenFile, w io.Writer, svc *Service) { // generate services comment generateComment(ctx, w, serviceApiName, "services", "service") // generate service api fmt.Fprintf(w, "type %s interface {\n", serviceApiName) - for _, svc := range methods { - generateServiceMethod(ctx, w, &svc) + for _, rpc := range svc.RPCs { + generateRPCMethod(ctx, w, &rpc) fmt.Fprintln(w) } fmt.Fprintln(w, "}") @@ -82,21 +97,21 @@ func generateServiceMethods(ctx *GenFile, w io.Writer, methods []RPC) { fmt.Fprintln(w, "}") fmt.Fprintln(w) - for _, met := range methods { - method := camelCaseName(met.RequestMsg) + for _, rpc := range svc.RPCs { + method := camelCaseName(rpc.RequestMsg) if m := strings.TrimSuffix(method, "Dump"); method != m { method = "Dump" + m } fmt.Fprintf(w, "func (c *%s) ", serviceImplName) - generateServiceMethod(ctx, w, &met) + generateRPCMethod(ctx, w, &rpc) fmt.Fprintln(w, " {") - if met.Stream { + if rpc.Stream { streamImpl := fmt.Sprintf("%s_%sClient", serviceImplName, method) fmt.Fprintf(w, "\tstream := c.ch.SendMultiRequest(in)\n") fmt.Fprintf(w, "\tx := &%s{stream}\n", streamImpl) fmt.Fprintf(w, "\treturn x, nil\n") - } else if replyTyp := camelCaseName(met.ReplyMsg); replyTyp != "" { + } else if replyTyp := camelCaseName(rpc.ReplyMsg); replyTyp != "" { fmt.Fprintf(w, "\tout := new(%s)\n", replyTyp) fmt.Fprintf(w, "\terr:= c.ch.SendRequest(in).ReceiveReply(out)\n") fmt.Fprintf(w, "\tif err != nil { return nil, err }\n") @@ -108,9 +123,9 @@ func generateServiceMethods(ctx *GenFile, w io.Writer, methods []RPC) { fmt.Fprintln(w, "}") fmt.Fprintln(w) - if met.Stream { - replyTyp := camelCaseName(met.ReplyMsg) - method := camelCaseName(met.RequestMsg) + if rpc.Stream { + replyTyp := camelCaseName(rpc.ReplyMsg) + method := camelCaseName(rpc.RequestMsg) if m := strings.TrimSuffix(method, "Dump"); method != m { method = "Dump" + m } @@ -143,7 +158,7 @@ func generateServiceMethods(ctx *GenFile, w io.Writer, methods []RPC) { fmt.Fprintf(w, "\tServiceName: \"%s\",\n", ctx.moduleName) fmt.Fprintf(w, "\tHandlerType: (*%s)(nil),\n", serviceApiName) fmt.Fprintf(w, "\tMethods: []api.MethodDesc{\n") - for _, method := range methods { + for _, method := range rpcs { fmt.Fprintf(w, "\t {\n") fmt.Fprintf(w, "\t MethodName: \"%s\",\n", method.Name) fmt.Fprintf(w, "\t },\n") @@ -157,7 +172,7 @@ func generateServiceMethods(ctx *GenFile, w io.Writer, methods []RPC) { fmt.Fprintln(w) } -func generateServiceMethod(ctx *GenFile, w io.Writer, rpc *RPC) { +func generateRPCMethod(ctx *GenFile, w io.Writer, rpc *RPC) { reqTyp := camelCaseName(rpc.RequestMsg) logf(" writing RPC: %+v", reqTyp) -- cgit 1.2.3-korg