"encoding/json"
"flag"
"fmt"
+ "go/format"
"io/ioutil"
"os"
- "os/exec"
"path/filepath"
"strings"
includeServices = flag.Bool("include-services", true, "Include RPC service api and client implementation.")
includeComments = flag.Bool("include-comments", false, "Include JSON API source in comments for each object.")
includeBinapiNames = flag.Bool("include-binapi-names", false, "Include binary API names in struct tag.")
+ importPrefix = flag.String("import-prefix", "", "Define import path prefix to be used to import types.")
continueOnError = flag.Bool("continue-onerror", false, "Continue with next file on error.")
debugMode = flag.Bool("debug", os.Getenv("GOVPP_DEBUG") != "", "Enable debug mode.")
ctx.includeComments = *includeComments
ctx.includeBinapiNames = *includeBinapiNames
ctx.includeServices = *includeServices
+ ctx.importPrefix = *importPrefix
// read API definition from input file
ctx.inputData, err = ioutil.ReadFile(ctx.inputFile)
}
}
- // generate Go package code
+ // generate Go package
var buf bytes.Buffer
if err := generatePackage(ctx, &buf); err != nil {
- return fmt.Errorf("generating code for package %s failed: %v", ctx.packageName, err)
+ return fmt.Errorf("generating Go package for %s failed: %v", ctx.packageName, err)
+ }
+ // format generated source code
+ gosrc, err := format.Source(buf.Bytes())
+ if err != nil {
+ return fmt.Errorf("formatting source code for package %s failed: %v", ctx.packageName, err)
}
// create output directory
return fmt.Errorf("creating output dir %s failed: %v", packageDir, err)
}
// write generated code to output file
- if err := ioutil.WriteFile(ctx.outputFile, buf.Bytes(), 0666); err != nil {
+ if err := ioutil.WriteFile(ctx.outputFile, gosrc, 0666); err != nil {
return fmt.Errorf("writing to output file %s failed: %v", ctx.outputFile, err)
}
- // go format the output file (fail probably means the output is not compilable)
- cmd := exec.Command("gofmt", "-w", ctx.outputFile)
- if output, err := cmd.CombinedOutput(); err != nil {
- return fmt.Errorf("gofmt failed: %v\n%s", err, string(output))
- }
-
return nil
}