diff options
author | Luke Shumaker <lukeshu@datawire.io> | 2022-08-14 20:52:33 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@datawire.io> | 2022-08-17 02:02:42 -0600 |
commit | 35997d235f3bac7c3f9bcd4b8d2b26b0d88dc387 (patch) | |
tree | 47386ceb19133207508c32e3669a483b4d43e7f7 /compat/json/compat.go | |
parent | 3ae8e37b8ca2b9a7769d659e134ee2711dc94b89 (diff) |
Get the new borrowed tests running right [ci-skip]
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 { |