From b1a7425ddc4520202b2a2cb1d0a60fafaa69075c Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Sun, 3 May 2020 15:35:57 +0200 Subject: [PATCH] Refactor event codegen into subdir --- codegen.sh | 2 +- codegen/v2/{ => events}/events.gen.go.tpl | 0 codegen/v2/{ => events}/events.go.tpl | 0 codegen/v2/{events.go => events/main.go} | 68 ++++------------------- codegen/v2/internal/strings.go | 15 +++++ codegen/v2/internal/templating.go | 41 ++++++++++++++ 6 files changed, 67 insertions(+), 59 deletions(-) rename codegen/v2/{ => events}/events.gen.go.tpl (100%) rename codegen/v2/{ => events}/events.go.tpl (100%) rename codegen/v2/{events.go => events/main.go} (77%) create mode 100644 codegen/v2/internal/strings.go create mode 100644 codegen/v2/internal/templating.go diff --git a/codegen.sh b/codegen.sh index d36146856..1a9936806 100755 --- a/codegen.sh +++ b/codegen.sh @@ -133,7 +133,7 @@ function provision { function events { if [ ! -f "build/event-gen" ]; then - CGO_ENABLED=0 go build -o ./build/event-gen codegen/v2/events.go + CGO_ENABLED=0 go build -o ./build/event-gen ./codegen/v2/events fi for SERVICE in system compose messaging; do diff --git a/codegen/v2/events.gen.go.tpl b/codegen/v2/events/events.gen.go.tpl similarity index 100% rename from codegen/v2/events.gen.go.tpl rename to codegen/v2/events/events.gen.go.tpl diff --git a/codegen/v2/events.go.tpl b/codegen/v2/events/events.go.tpl similarity index 100% rename from codegen/v2/events.go.tpl rename to codegen/v2/events/events.go.tpl diff --git a/codegen/v2/events.go b/codegen/v2/events/main.go similarity index 77% rename from codegen/v2/events.go rename to codegen/v2/events/main.go index 43c8bb7cd..e18fdb9e1 100644 --- a/codegen/v2/events.go +++ b/codegen/v2/events/main.go @@ -1,24 +1,18 @@ package main -// *Set type generator for functions like Walk(), Filter(), FindByID() & IDs() - import ( - "bytes" "flag" "fmt" - "go/format" - "io" + "github.com/cortezaproject/corteza-server/codegen/v2/internal" + "github.com/cortezaproject/corteza-server/pkg/cli" + "gopkg.in/yaml.v2" "os" "strings" "text/template" - - "gopkg.in/yaml.v2" - - "github.com/cortezaproject/corteza-server/pkg/cli" ) const ( - eventsTemplateFile = "codegen/v2/*.go.tpl" + templateFile = "codegen/v2/events/*.go.tpl" ) type ( @@ -67,11 +61,11 @@ type ( func main() { tpl := template.New("").Funcs(map[string]interface{}{ - "camelCase": camelCase, + "camelCase": internal.CamelCase, "makeEvents": makeEvents, }) - tpl = template.Must(tpl.ParseGlob(eventsTemplateFile)) + tpl = template.Must(tpl.ParseGlob(templateFile)) var ( definitionsPathStr string @@ -113,7 +107,7 @@ func main() { decoder = yaml.NewDecoder(f) } - tplData.Command = "go run codegen/v2/events.go --service " + serviceStr + tplData.Command = "go run ./codegen/v2/events --service " + serviceStr tplData.YAML = definitionsPathStr + yamlDefFileName tplData.Package = "event" @@ -136,7 +130,7 @@ func main() { // check if resource name is shorter and has invalid prefix cli.HandleError(fmt.Errorf("invalid resource prefix: %q", resName)) } else { - tplData.ResourceIdent = camelCase(strings.Split(resName[l+1:], ":")...) + tplData.ResourceIdent = internal.CamelCase(strings.Split(resName[l+1:], ":")...) fname = resName[l+1:] fname = strings.ReplaceAll(fname, ":", "_") @@ -187,10 +181,10 @@ func main() { _, err := os.Stat(usrOutput) if overwrite || os.IsNotExist(err) { - writeTo(tpl, tplData, "events.go.tpl", usrOutput) + internal.WriteTo(tpl, tplData, "events.go.tpl", usrOutput) } - writeTo(tpl, tplData, "events.gen.go.tpl", genOutput) + internal.WriteTo(tpl, tplData, "events.gen.go.tpl", genOutput) } } @@ -215,18 +209,6 @@ func makeEvents(def eventDef) []string { ) } -func camelCase(pp ...string) (out string) { - for i, p := range pp { - if i > 0 && len(p) > 1 { - p = strings.ToUpper(p[:1]) + p[1:] - } - - out = out + p - } - - return out -} - func makeEventGroup(pfix string, ee []string) (out []string) { for _, e := range ee { out = append(out, pfix+strings.ToUpper(e[:1])+e[1:]) @@ -234,33 +216,3 @@ func makeEventGroup(pfix string, ee []string) (out []string) { return } - -func writeTo(tpl *template.Template, payload interface{}, name, dst string) { - var output io.WriteCloser - buf := bytes.Buffer{} - - if err := tpl.ExecuteTemplate(&buf, name, payload); err != nil { - cli.HandleError(err) - } else { - fmtsrc, err := format.Source(buf.Bytes()) - if err != nil { - fmt.Fprintf(os.Stderr, "fmt warn: %v", err) - fmtsrc = buf.Bytes() - } - - if dst == "" || dst == "-" { - output = os.Stdout - } else { - // cli.HandleError(os.Remove(dst)) - if output, err = os.Create(dst); err != nil { - cli.HandleError(err) - } - - defer output.Close() - } - - if _, err := output.Write(fmtsrc); err != nil { - cli.HandleError(err) - } - } -} diff --git a/codegen/v2/internal/strings.go b/codegen/v2/internal/strings.go new file mode 100644 index 000000000..4f48bc75b --- /dev/null +++ b/codegen/v2/internal/strings.go @@ -0,0 +1,15 @@ +package internal + +import "strings" + +func CamelCase(pp ...string) (out string) { + for i, p := range pp { + if i > 0 && len(p) > 1 { + p = strings.ToUpper(p[:1]) + p[1:] + } + + out = out + p + } + + return out +} diff --git a/codegen/v2/internal/templating.go b/codegen/v2/internal/templating.go new file mode 100644 index 000000000..a0f1abca4 --- /dev/null +++ b/codegen/v2/internal/templating.go @@ -0,0 +1,41 @@ +package internal + +import ( + "bytes" + "fmt" + "github.com/cortezaproject/corteza-server/pkg/cli" + "go/format" + "io" + "os" + "text/template" +) + +func WriteTo(tpl *template.Template, payload interface{}, name, dst string) { + var output io.WriteCloser + buf := bytes.Buffer{} + + if err := tpl.ExecuteTemplate(&buf, name, payload); err != nil { + cli.HandleError(err) + } else { + fmtsrc, err := format.Source(buf.Bytes()) + if err != nil { + fmt.Fprintf(os.Stderr, "fmt warn: %v", err) + fmtsrc = buf.Bytes() + } + + if dst == "" || dst == "-" { + output = os.Stdout + } else { + // cli.HandleError(os.Remove(dst)) + if output, err = os.Create(dst); err != nil { + cli.HandleError(err) + } + + defer output.Close() + } + + if _, err := output.Write(fmtsrc); err != nil { + cli.HandleError(err) + } + } +}