summaryrefslogtreecommitdiff
path: root/compat/json/compat.go
diff options
context:
space:
mode:
Diffstat (limited to 'compat/json/compat.go')
-rw-r--r--compat/json/compat.go24
1 files changed, 17 insertions, 7 deletions
diff --git a/compat/json/compat.go b/compat/json/compat.go
index 688b35c..3678135 100644
--- a/compat/json/compat.go
+++ b/compat/json/compat.go
@@ -72,25 +72,35 @@ func Marshal(v any) ([]byte, error) {
}
type Encoder struct {
+ out io.Writer
+ buf bytes.Buffer
encoder *lowmemjson.Encoder
formatter *lowmemjson.ReEncoder
}
func NewEncoder(w io.Writer) *Encoder {
ret := &Encoder{
- formatter: lowmemjson.NewReEncoder(w, lowmemjson.ReEncoderConfig{
- AllowMultipleValues: true,
-
- Compact: true,
- ForceTrailingNewlines: true,
- }),
+ out: w,
}
+ ret.formatter = lowmemjson.NewReEncoder(&ret.buf, lowmemjson.ReEncoderConfig{
+ AllowMultipleValues: true,
+
+ Compact: true,
+ ForceTrailingNewlines: true,
+ })
ret.encoder = lowmemjson.NewEncoder(ret.formatter)
return ret
}
func (enc *Encoder) Encode(v any) error {
- return convertEncodeError(enc.encoder.Encode(v))
+ if err := convertEncodeError(enc.encoder.Encode(v)); err != nil {
+ enc.buf.Reset()
+ return err
+ }
+ if _, err := enc.buf.WriteTo(enc.out); err != nil {
+ return err
+ }
+ return nil
}
func (enc *Encoder) SetEscapeHTML(on bool) {