Compare commits

..

2 Commits

Author SHA1 Message Date
09e2afe329 Refactored CStyle in Header and Source File 2025-04-26 17:33:06 +02:00
d1f91e547b Fixed some Typos in Template 2025-04-26 17:25:39 +02:00
5 changed files with 75 additions and 14 deletions

12
main.go
View File

@ -24,9 +24,17 @@ func main() {
var cfg proto.Proto var cfg proto.Proto
json.Unmarshal(file, &cfg) json.Unmarshal(file, &cfg)
a, err := proto.CreateCStyle(&cfg) proto.InitTemplates()
header, err := proto.CreateCStyleHeader(&cfg)
if err != nil { if err != nil {
log.Printf("ERROR: %v", err) 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)
} }

View File

@ -69,16 +69,22 @@ type CStyleData struct {
MessagesESPtoPC []ProtoMessage MessagesESPtoPC []ProtoMessage
} }
func CreateCStyle(proto *Proto) (string, error) { var tmpl *template.Template
func InitTemplates() {
funcs := template.FuncMap{ funcs := template.FuncMap{
"snake": toSnakeCase, "snake": toSnakeCase,
"isLast": isLast, "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 { if err != nil {
log.Fatalf("failed to parse templates: %v", err) log.Fatalf("failed to parse templates: %v", err)
} }
tmpl = Ntmpl
}
func CreateCStyleHeader(proto *Proto) (string, error) {
payloads := []PayloadStruct{} payloads := []PayloadStruct{}
@ -113,7 +119,50 @@ func CreateCStyle(proto *Proto) (string, error) {
} }
var buf bytes.Buffer 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 { if err != nil {
log.Printf("Error Rendering template: %v", err) log.Printf("Error Rendering template: %v", err)
} }

View File

@ -19,16 +19,16 @@ typedef struct {
{{.DataType}} {{.Name}}; {{.DataType}} {{.Name}};
{{- end}} {{- end}}
{{- end }} {{- end }}
}{{ .Name }}Payload; } {{ .Name }}Payload;
{{ end }} {{ end }}
{{end}} {{end}}
{{define "union"}} {{define "union"}}
typedef union { typedef union {
{{- range .}} {{- range .}}
{{.Name}} {{ .Name | snake}} {{.Name}}Payload {{ .Name | snake}};
{{- end }} {{- end }}
}PayloadUnion: } PayloadUnion;
{{end}} {{end}}
{{define "handler"}} {{define "handler"}}

View File

@ -1,4 +1,4 @@
{{- define "cpart" -}} {{- define "cpartHeader" -}}
// AUTO GENERATED DO NOT EDIT!!! // AUTO GENERATED DO NOT EDIT!!!
#ifndef _PROTO_HEADER #ifndef _PROTO_HEADER
@ -11,10 +11,5 @@
{{ block "union" .PayloadStructs }} {{ end }} {{ block "union" .PayloadStructs }} {{ end }}
{{ block "handler" .MessagesPCtoESP}} {{ end }}
{{ block "dispatcher" .MessagesPCtoESP}} {{ end }}
{{ block "send_functions" .MessagesESPtoPC}} {{ end }}
#endif #endif
{{- end -}} {{- end -}}

View File

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