diff options
Diffstat (limited to 'binapigen/gen_rpc.go')
-rw-r--r-- | binapigen/gen_rpc.go | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/binapigen/gen_rpc.go b/binapigen/gen_rpc.go index ba23f4a..fa123f0 100644 --- a/binapigen/gen_rpc.go +++ b/binapigen/gen_rpc.go @@ -71,7 +71,7 @@ func GenerateRPC(gen *Generator, file *File) *GenFile { func genService(g *GenFile, svc *Service) { // generate comment - g.P("// ", serviceApiName, " defines RPC service ", g.file.Desc.Name, ".") + g.P("// ", serviceApiName, " defines RPC service ", g.file.Desc.Name, ".") // generate service interface g.P("type ", serviceApiName, " interface {") @@ -152,6 +152,8 @@ func genService(g *GenFile, svc *Service) { g.P(" case *", msgDetails.GoIdent, ":") g.P(" return m, nil") g.P(" case *", msgReply.GoIdent, ":") + g.P(" err = c.Stream.Close()") + g.P(" if err != nil { return nil, err }") g.P(" return nil, ", ioPkg.Ident("EOF")) g.P(" default:") g.P(" return nil, ", fmtPkg.Ident("Errorf"), "(\"unexpected message: %T %v\", m, m)") @@ -160,12 +162,22 @@ func genService(g *GenFile, svc *Service) { g.P("out := new(", rpc.MsgReply.GoIdent, ")") g.P("err := c.conn.Invoke(ctx, in, out)") g.P("if err != nil { return nil, err }") - g.P("return out, nil") + if retvalField := getRetvalField(rpc.MsgReply); retvalField != nil { + if fieldType := getFieldType(g, retvalField); fieldType == "int32" { + g.P("return out, ", govppApiPkg.Ident("RetvalToVPPApiError"), "(out.", retvalField.GoName, ")") + } else { + g.P("return out, ", govppApiPkg.Ident("RetvalToVPPApiError"), "(int32(out.", retvalField.GoName, "))") + } + } else { + g.P("return out, nil") + } } else { g.P("stream, err := c.conn.NewStream(ctx)") g.P("if err != nil { return err }") g.P("err = stream.SendMsg(in)") g.P("if err != nil { return err }") + g.P("err = stream.Close()") + g.P("if err != nil { return err }") g.P("return nil") } g.P("}") |