From 09e2afe329d46f809d36983c80fc34a70ab99118 Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 26 Apr 2025 17:33:06 +0200 Subject: [PATCH] Refactored CStyle in Header and Source File --- main.go | 12 ++++- proto/proto.go | 55 ++++++++++++++++++++-- templates/{cpart.tmpl => cpartHeader.tmpl} | 7 +-- templates/cpartSource.tmpl | 9 ++++ 4 files changed, 72 insertions(+), 11 deletions(-) rename templates/{cpart.tmpl => cpartHeader.tmpl} (61%) create mode 100644 templates/cpartSource.tmpl diff --git a/main.go b/main.go index fc4a89c..ded4418 100644 --- a/main.go +++ b/main.go @@ -24,9 +24,17 @@ func main() { var cfg proto.Proto json.Unmarshal(file, &cfg) - a, err := proto.CreateCStyle(&cfg) + proto.InitTemplates() + + header, err := proto.CreateCStyleHeader(&cfg) if err != nil { log.Printf("ERROR: %v", err) } - log.Printf("TEMPLATE: \n%v", a) + log.Printf("TEMPLATE HEADER: \n%v", header) + + source, err := proto.CreateCStyleSource(&cfg) + if err != nil { + log.Printf("ERROR: %v", err) + } + log.Printf("TEMPLATE SOURCE: \n%v", source) } diff --git a/proto/proto.go b/proto/proto.go index 1031d00..da19d5c 100644 --- a/proto/proto.go +++ b/proto/proto.go @@ -69,16 +69,22 @@ type CStyleData struct { MessagesESPtoPC []ProtoMessage } -func CreateCStyle(proto *Proto) (string, error) { +var tmpl *template.Template + +func InitTemplates() { funcs := template.FuncMap{ "snake": toSnakeCase, "isLast": isLast, } - tmpl, err := template.New("all").Funcs(funcs).ParseGlob("templates/*.tmpl") + Ntmpl, err := template.New("all").Funcs(funcs).ParseGlob("templates/*.tmpl") if err != nil { log.Fatalf("failed to parse templates: %v", err) } + tmpl = Ntmpl +} + +func CreateCStyleHeader(proto *Proto) (string, error) { payloads := []PayloadStruct{} @@ -113,7 +119,50 @@ func CreateCStyle(proto *Proto) (string, error) { } var buf bytes.Buffer - err = tmpl.ExecuteTemplate(&buf, "cpart", data) + err := tmpl.ExecuteTemplate(&buf, "cpartHeader", data) + if err != nil { + log.Printf("Error Rendering template: %v", err) + } + + return buf.String(), nil +} + +func CreateCStyleSource(proto *Proto) (string, error) { + + payloads := []PayloadStruct{} + + for _, payload := range proto.PC_TO_ESP { + tmp := PayloadStruct{ + Name: payload.Name, + Entries: payload.Payload, + } + payloads = append(payloads, tmp) + } + + for _, payload := range proto.ESP_TO_PC { + tmp := PayloadStruct{ + Name: payload.Name, + Entries: payload.Payload, + } + payloads = append(payloads, tmp) + } + + var data = CStyleData{ + CenumPCTOESP: Cenum{ + EnumName: "PC_TO_ESP_MESSAGE_IDS", + Entries: proto.PC_TO_ESP, + }, + CenumESPTOPC: Cenum{ + EnumName: "ESP_TO_PC_MESSAGE_IDS", + Entries: proto.ESP_TO_PC, + }, + PayloadStructs: payloads, + MessagesPCtoESP: proto.PC_TO_ESP, + MessagesESPtoPC: proto.ESP_TO_PC, + } + + var buf bytes.Buffer + err := tmpl.ExecuteTemplate(&buf, "cpartSource", data) if err != nil { log.Printf("Error Rendering template: %v", err) } diff --git a/templates/cpart.tmpl b/templates/cpartHeader.tmpl similarity index 61% rename from templates/cpart.tmpl rename to templates/cpartHeader.tmpl index 1fad7b5..1659f12 100644 --- a/templates/cpart.tmpl +++ b/templates/cpartHeader.tmpl @@ -1,4 +1,4 @@ -{{- define "cpart" -}} +{{- define "cpartHeader" -}} // AUTO GENERATED DO NOT EDIT!!! #ifndef _PROTO_HEADER @@ -11,10 +11,5 @@ {{ block "union" .PayloadStructs }} {{ end }} -{{ block "handler" .MessagesPCtoESP}} {{ end }} - -{{ block "dispatcher" .MessagesPCtoESP}} {{ end }} - -{{ block "send_functions" .MessagesESPtoPC}} {{ end }} #endif {{- end -}} diff --git a/templates/cpartSource.tmpl b/templates/cpartSource.tmpl new file mode 100644 index 0000000..ef15d82 --- /dev/null +++ b/templates/cpartSource.tmpl @@ -0,0 +1,9 @@ +{{- define "cpartSource" -}} +// AUTO GENERATED DO NOT EDIT!!! + +{{ block "handler" .MessagesPCtoESP}} {{ end }} + +{{ block "dispatcher" .MessagesPCtoESP}} {{ end }} + +{{ block "send_functions" .MessagesESPtoPC}} {{ end }} +{{- end -}}