summaryrefslogtreecommitdiff
path: root/internal/mkserialize/mkserialize.go
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-12-09 14:59:36 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-12-09 14:59:36 +0100
commitf52a9a1956f5cdabfc88c818cedafec1f3e47ec9 (patch)
treeae8b9149a3915739fc3d2423130795d2d9f1b559 /internal/mkserialize/mkserialize.go
parent6e821a1442c47919b6127f48e0a614abb4b5c69f (diff)
nested trailing data errors: still attempt deserialization
Diffstat (limited to 'internal/mkserialize/mkserialize.go')
-rw-r--r--internal/mkserialize/mkserialize.go11
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)