summaryrefslogtreecommitdiff
path: root/internal/generate
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-08 11:22:51 +0200
committerPaul Buetow <paul@buetow.org>2026-03-08 11:22:51 +0200
commit742ef1480ee52558b77e1be1671e17065af36a1d (patch)
tree19d40cf0911573476f0f174af36cbcc88be834f5 /internal/generate
parent637200d78744bc645d890ec4d91a9dd2ebd286ea (diff)
types: stop panicking in generated decode constructors
Diffstat (limited to 'internal/generate')
-rw-r--r--internal/generate/typesgo.go5
-rw-r--r--internal/generate/typesgo_test.go4
2 files changed, 7 insertions, 2 deletions
diff --git a/internal/generate/typesgo.go b/internal/generate/typesgo.go
index 06ed49a..dca40fc 100644
--- a/internal/generate/typesgo.go
+++ b/internal/generate/typesgo.go
@@ -299,8 +299,9 @@ func writeSyncPool(b *strings.Builder, goName, selfRef string) {
fmt.Fprintf(b, "func New%s(raw []byte) *%s {\n", goName, goName)
fmt.Fprintf(b, "\t%s := poolOf%ss.Get().(*%s)\n", selfRef, goName, goName)
fmt.Fprintf(b, "\tif err := binary.Read(bytes.NewReader(raw), binary.LittleEndian, %s); err != nil {\n", selfRef)
- fmt.Fprintf(b, "\t\tfmt.Println(%s, raw, len(raw), err)\n", selfRef)
- b.WriteString("\t\tpanic(raw)\n\t}\n")
+ fmt.Fprintf(b, "\t\t*%s = %s{}\n", selfRef, goName)
+ fmt.Fprintf(b, "\t\tpoolOf%ss.Put(%s)\n", goName, selfRef)
+ b.WriteString("\t\treturn nil\n\t}\n")
fmt.Fprintf(b, "\treturn %s\n}\n\n", selfRef)
fmt.Fprintf(b, "func (%s *%s) Bytes() ([]byte, error) {\n", selfRef, goName)
diff --git a/internal/generate/typesgo_test.go b/internal/generate/typesgo_test.go
index f600582..76c0521 100644
--- a/internal/generate/typesgo_test.go
+++ b/internal/generate/typesgo_test.go
@@ -186,9 +186,13 @@ func TestGenerateTypesGoSyncPool(t *testing.T) {
requireContains(t, output, "var poolOfOpenEvents = sync.Pool{")
requireContains(t, output, "func NewOpenEvent(raw []byte) *OpenEvent")
+ requireContains(t, output, "return nil")
requireContains(t, output, "func (o *OpenEvent) Bytes() ([]byte, error)")
requireContains(t, output, "func (o *OpenEvent) Recycle()")
requireContains(t, output, "poolOfOpenEvents.Put(o)")
+ if strings.Contains(output, "panic(raw)") {
+ t.Fatalf("generated constructors must not panic on decode errors")
+ }
requireContains(t, output, "var poolOfNullEvents = sync.Pool{")
requireContains(t, output, "func NewNullEvent(raw []byte) *NullEvent")