code: func generateHeader(ctx *context, w io.Writer) {
  	fmt.Fprintln(w, "// Code generated by GoVPP binapi-generator. DO NOT EDIT.")
  	fmt.Fprintf(w, "//  source: %s\n", ctx.inputFile)
  	fmt.Fprintln(w)
  
  	fmt.Fprintln(w, "/*")
  	fmt.Fprintf(w, " Package %s is a generated from VPP binary API module '%s'.\n", ctx.packageName, ctx.moduleName)
  	fmt.Fprintln(w)
  	fmt.Fprintln(w, " It contains following objects:")
  	var printObjNum = func(obj string, num int) {
  		if num > 0 {
  			if num > 1 {
  				if strings.HasSuffix(obj, "s") {
  					obj += "es"
  				} else {
  					obj += "s"
  				}
  			}
  			fmt.Fprintf(w, "\t%3d %s\n", num, obj)
  		}
  	}
  
  	printObjNum("service", len(ctx.packageData.Services))
  	printObjNum("enum", len(ctx.packageData.Enums))
  	printObjNum("alias", len(ctx.packageData.Aliases))
  	printObjNum("type", len(ctx.packageData.Types))
  	printObjNum("union", len(ctx.packageData.Unions))
  	printObjNum("message", len(ctx.packageData.Messages))
  	fmt.Fprintln(w, "*/")
  	fmt.Fprintf(w, "package %s\n", ctx.packageName)
  	fmt.Fprintln(w)
  }
docs: // generateHeader writes generated package header into w