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 -}}