Simplify subscribing to events and fix events
[govpp.git] / cmd / binapi-generator / generate.go
index 251d39d..73bcd2a 100644 (file)
@@ -140,9 +140,9 @@ func generatePackage(ctx *context, w *bufio.Writer) error {
        if len(ctx.packageData.Services) > 0 {
                fmt.Fprintf(w, "/* Services */\n\n")
 
-               fmt.Fprintf(w, "type %s interface {\n", "Services")
                ctx.inputBuff = bytes.NewBuffer(ctx.inputData)
                ctx.inputLine = 0
+               fmt.Fprintf(w, "type %s interface {\n", "Services")
                for _, svc := range ctx.packageData.Services {
                        generateService(ctx, w, &svc)
                }
@@ -181,6 +181,7 @@ func generateHeader(ctx *context, w io.Writer) {
        fmt.Fprintf(w, "\t%s\n", filepath.Base(ctx.inputFile))
        fmt.Fprintln(w)
        fmt.Fprintln(w, "It contains these VPP binary API objects:")
+
        var printObjNum = func(obj string, num int) {
                if num > 0 {
                        if num > 1 {
@@ -194,6 +195,7 @@ func generateHeader(ctx *context, w io.Writer) {
        printObjNum("enum", len(ctx.packageData.Enums))
        printObjNum("union", len(ctx.packageData.Unions))
        printObjNum("service", len(ctx.packageData.Services))
+
        fmt.Fprintln(w, "*/")
        fmt.Fprintf(w, "package %s\n", ctx.packageName)
        fmt.Fprintln(w)
@@ -207,6 +209,7 @@ func generateImports(ctx *context, w io.Writer) {
        fmt.Fprintln(w)
 
        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 _ = struc.Pack\n")
        fmt.Fprintf(w, "var _ = bytes.NewBuffer\n")
        fmt.Fprintln(w)
@@ -504,13 +507,7 @@ func generateService(ctx *context, w io.Writer, svc *Service) {
        reqTyp := camelCaseName(svc.RequestType)
 
        // method name is same as parameter type name by default
-       method := reqTyp
-       if svc.Stream {
-               // use Dump as prefix instead of suffix for stream services
-               if m := strings.TrimSuffix(method, "Dump"); method != m {
-                       method = "Dump" + m
-               }
-       }
+       method := svc.MethodName()
        params := fmt.Sprintf("*%s", reqTyp)
        returns := "error"
        if replyTyp := camelCaseName(svc.ReplyType); replyTyp != "" {
@@ -521,25 +518,28 @@ func generateService(ctx *context, w io.Writer, svc *Service) {
 }
 
 // generateMessageNameGetter generates getter for original VPP message name into the provider writer
-func generateMessageNameGetter(w io.Writer, structName string, msgName string) {
-       fmt.Fprintln(w, "func (*"+structName+") GetMessageName() string {")
-       fmt.Fprintln(w, "\treturn \""+msgName+"\"")
-       fmt.Fprintln(w, "}")
+func generateMessageNameGetter(w io.Writer, structName, msgName string) {
+       fmt.Fprintf(w, `func (*%s) GetMessageName() string {
+       return %q
+}
+`, structName, msgName)
 }
 
 // generateTypeNameGetter generates getter for original VPP type name into the provider writer
-func generateTypeNameGetter(w io.Writer, structName string, msgName string) {
-       fmt.Fprintln(w, "func (*"+structName+") GetTypeName() string {")
-       fmt.Fprintln(w, "\treturn \""+msgName+"\"")
-       fmt.Fprintln(w, "}")
+func generateTypeNameGetter(w io.Writer, structName, msgName string) {
+       fmt.Fprintf(w, `func (*%s) GetTypeName() string {
+       return %q
+}
+`, structName, msgName)
 }
 
 // generateCrcGetter generates getter for CRC checksum of the message definition into the provider writer
-func generateCrcGetter(w io.Writer, structName string, crc string) {
+func generateCrcGetter(w io.Writer, structName, crc string) {
        crc = strings.TrimPrefix(crc, "0x")
-       fmt.Fprintln(w, "func (*"+structName+") GetCrcString() string {")
-       fmt.Fprintln(w, "\treturn \""+crc+"\"")
-       fmt.Fprintln(w, "}")
+       fmt.Fprintf(w, `func (*%s) GetCrcString() string {
+       return %q
+}
+`, structName, crc)
 }
 
 // generateMessageTypeGetter generates message factory for the generated message into the provider writer