summaryrefslogtreecommitdiff
path: root/reencode.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-01-30 14:50:47 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-02-10 21:55:49 -0700
commit276ab5935873edc05e1882c06fc527a14babd27c (patch)
treeba9ec20307b4200f1010bc291d78c3786b57e326 /reencode.go
parentc604347f1950e3dfbef2f524da8a63692848da27 (diff)
encoder, reencoder: Distinguish between syntax errors and I/O errors
Diffstat (limited to 'reencode.go')
-rw-r--r--reencode.go12
1 files changed, 9 insertions, 3 deletions
diff --git a/reencode.go b/reencode.go
index e48c58c..d19dc1a 100644
--- a/reencode.go
+++ b/reencode.go
@@ -232,7 +232,7 @@ func (enc *ReEncoder) Close() error {
}
if len(enc.barriers) == 0 {
if err := enc.handleRune(0, jsonparse.RuneTypeError, enc.stackSize()); err != nil {
- enc.err = &ReEncodeSyntaxError{
+ enc.err = &ReEncodeWriteError{
Err: err,
Offset: enc.inputPos,
}
@@ -274,8 +274,14 @@ rehandle:
}
return enc.written, enc.err
}
- enc.err = enc.handleRune(c, t, enc.stackSize())
- if enc.err == nil && t == jsonparse.RuneTypeEOF {
+ if err := enc.handleRune(c, t, enc.stackSize()); err != nil {
+ enc.err = &ReEncodeWriteError{
+ Err: err,
+ Offset: enc.inputPos,
+ }
+ return enc.written, enc.err
+ }
+ if t == jsonparse.RuneTypeEOF {
if enc.AllowMultipleValues && len(enc.barriers) == 0 {
enc.par.Reset()
goto rehandle