diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-08 11:22:51 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-08 11:22:51 +0200 |
| commit | 742ef1480ee52558b77e1be1671e17065af36a1d (patch) | |
| tree | 19d40cf0911573476f0f174af36cbcc88be834f5 /internal/generate | |
| parent | 637200d78744bc645d890ec4d91a9dd2ebd286ea (diff) | |
types: stop panicking in generated decode constructors
Diffstat (limited to 'internal/generate')
| -rw-r--r-- | internal/generate/typesgo.go | 5 | ||||
| -rw-r--r-- | internal/generate/typesgo_test.go | 4 |
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") |
