Bump to 6.0.43, use go generate

Also moved fetching of JSON information to Go for cross-OS usage.
This commit is contained in:
Paul Tyng
2021-04-09 09:41:43 -04:00
parent 5219e06753
commit 4ab4036985
76 changed files with 504 additions and 429 deletions

View File

@@ -2,7 +2,9 @@ package main
import (
"bytes"
_ "embed"
"encoding/json"
"errors"
"flag"
"fmt"
"io"
@@ -171,7 +173,7 @@ func cleanName(name string, reps []replacement) string {
}
func usage() {
fmt.Printf("Usage: %s [OPTIONS] versionDir outputDir\n", path.Base(os.Args[0]))
fmt.Printf("Usage: %s [OPTIONS] version\n", path.Base(os.Args[0]))
flag.PrintDefaults()
}
@@ -179,32 +181,61 @@ func main() {
flag.Usage = usage
noEmbeddedTypes := flag.Bool("no-embedded-types", true, "Whether to generate top-level type definitions for embedded type definitions")
noEmbeddedTypesFlag := flag.Bool("no-embedded-types", true, "Whether to generate top-level type definitions for embedded type definitions")
versionBaseDirFlag := flag.String("version-base-dir", ".", "The base directory for version JSON files")
outputDirFlag := flag.String("output-dir", ".", "The output directory of the generated Go code")
downloadOnly := flag.Bool("download-only", false, "Only download and build the fields JSON directory, do not generate")
flag.Parse()
versionDir := flag.Arg(0)
outputDir := flag.Arg(1)
embedTypes = !*noEmbeddedTypes
embedTypes = !*noEmbeddedTypesFlag
versionDir := flag.Arg(0)
if versionDir == "" {
fmt.Print("error: no version directory specified\n\n")
usage()
os.Exit(1)
}
if outputDir == "" {
fmt.Print("error: no output directory specified\n\n")
usage()
os.Exit(1)
}
wd, err := os.Getwd()
if err != nil {
panic(err)
}
fieldsDir := filepath.Join(wd, versionDir)
outDir := filepath.Join(wd, outputDir)
fieldsDir := filepath.Join(wd, *versionBaseDirFlag, versionDir)
outDir := filepath.Join(wd, *outputDirFlag)
fieldsInfo, err := os.Stat(fieldsDir)
if err != nil {
if !errors.Is(err, os.ErrNotExist) {
panic(err)
}
// download fields, create
jarFile, err := downloadJar(versionDir)
if err != nil {
panic(err)
}
err = extractJSON(jarFile, fieldsDir)
os.Remove(jarFile)
if err != nil {
panic(err)
}
fieldsInfo, err = os.Stat(fieldsDir)
if err != nil {
panic(err)
}
}
if !fieldsInfo.IsDir() {
panic("version info isn't a directory")
}
if *downloadOnly {
fmt.Println("Fields JSON ready!")
os.Exit(0)
}
fieldsFiles, err := ioutil.ReadDir(fieldsDir)
if err != nil {
@@ -412,6 +443,9 @@ func (r *Resource) processJSON(b []byte) error {
return nil
}
//go:embed api.go.tmpl
var apiGoTemplate string
func (r *Resource) generateCode() (string, error) {
var err error
var buf bytes.Buffer
@@ -419,7 +453,7 @@ func (r *Resource) generateCode() (string, error) {
tpl := template.Must(template.New("api.go.tmpl").Funcs(template.FuncMap{
"embedTypes": func() bool { return embedTypes },
}).ParseFiles("api.go.tmpl"))
}).Parse(apiGoTemplate))
tpl.Execute(writer, r)