diff --git a/tlv/internal/gen/gen_tlv_types.go b/tlv/internal/gen/gen_tlv_types.go new file mode 100644 index 000000000..d35a2b650 --- /dev/null +++ b/tlv/internal/gen/gen_tlv_types.go @@ -0,0 +1,59 @@ +package main + +import ( + "bytes" + "flag" + "os" + "text/template" +) + +const ( + numberOfTypes = 100 + defaultOutputFile = "tlv_types_generated.go" +) + +const typeCodeTemplate = `// Code generated by tlv/internal/gen; DO NOT EDIT. + +package tlv + +{{- range $index, $element := . }} + +type tlvType{{ $index }} struct{} + +func (t *tlvType{{ $index }}) typeVal() Type { + return {{ $index }} +} + +type TlvType{{ $index }} = *tlvType{{ $index }} +{{- end }} +` + +func main() { + // Create a slice of items that the template can range over. + var items []struct{} + for i := uint16(0); i <= numberOfTypes; i++ { + items = append(items, struct{}{}) + } + + tpl, err := template.New("tlv").Parse(typeCodeTemplate) + if err != nil { + panic(err) + } + + // Execute the template + var out bytes.Buffer + err = tpl.Execute(&out, items) + if err != nil { + panic(err) + } + + outputFile := flag.String( + "o", defaultOutputFile, "Output file for generated code", + ) + flag.Parse() + + err = os.WriteFile(*outputFile, out.Bytes(), 0644) + if err != nil { + panic(err) + } +}