diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-12-09 14:59:36 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-12-09 14:59:36 +0100 |
commit | f52a9a1956f5cdabfc88c818cedafec1f3e47ec9 (patch) | |
tree | ae8b9149a3915739fc3d2423130795d2d9f1b559 /internal/mkserialize/mkserialize.go | |
parent | 6e821a1442c47919b6127f48e0a614abb4b5c69f (diff) |
nested trailing data errors: still attempt deserialization
Diffstat (limited to 'internal/mkserialize/mkserialize.go')
-rw-r--r-- | internal/mkserialize/mkserialize.go | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/internal/mkserialize/mkserialize.go b/internal/mkserialize/mkserialize.go index 4535aaa..f5dbeb4 100644 --- a/internal/mkserialize/mkserialize.go +++ b/internal/mkserialize/mkserialize.go @@ -200,8 +200,13 @@ func genSerialize(t types.Type, expr string, pos token.Pos, doc *ast.CommentGrou lenhdr = types.Typ[types.Uint32] case "//mt:opt": fmt.Println("if err := pcall(func() {") - defer fmt.Println("}); err != nil && err != io.EOF", - "{ chk(err) }") + defer func() { + fmt.Println("}); err != nil && err != io.EOF {") + fmt.Println("if _, ok := err.(rudp.TrailingDataError); ok {") + fmt.Println("defer chk(err)") + fmt.Println("} else { chk(err) }") + fmt.Println("}") + }() default: pragma = false } @@ -267,7 +272,9 @@ func genSerialize(t types.Type, expr string, pos token.Pos, doc *ast.CommentGrou fmt.Println("}); err != nil", `{`, `if err == io.EOF { chk(io.EOF) };`, + `if _, ok := err.(rudp.TrailingDataError); ok { defer chk(err) } else {`, `chk(fmt.Errorf("%s: %w", `+strconv.Quote(t.String())+`, err))`, + `}`, `}`) case *types.Struct: st := pos2node(pos)[0].(*ast.StructType) |