diff options
Diffstat (limited to 'compat/json/compat.go')
-rw-r--r-- | compat/json/compat.go | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/compat/json/compat.go b/compat/json/compat.go index 59eff6c..37a0d5b 100644 --- a/compat/json/compat.go +++ b/compat/json/compat.go @@ -70,6 +70,43 @@ func Marshal(v any) ([]byte, error) { }) } +type Encoder struct { + inner lowmemjson.ReEncoder +} + +func NewEncoder(w io.Writer) *Encoder { + return &Encoder{ + inner: lowmemjson.ReEncoder{ + Out: w, + Compact: true, + }, + } +} + +func (enc *Encoder) Encode(v any) error { + if err := convertEncodeError(lowmemjson.Encode(&enc.inner, v)); err != nil { + return err + } + if err := convertEncodeError(enc.inner.Close()); err != nil { + return err + } + return nil +} + +func (enc *Encoder) SetEscapeHTML(on bool) { + if on { + enc.inner.BackslashEscape = nil + } else { + enc.inner.BackslashEscape = lowmemjson.EscapeJSSafe + } +} + +func (enc *Encoder) SetIndent(prefix, indent string) { + enc.inner.Compact = prefix == "" && indent == "" + enc.inner.Prefix = prefix + enc.inner.Indent = indent +} + // ReEncode wrappers ///////////////////////////////////////////////// func convertReEncodeError(err error) error { |