summaryrefslogtreecommitdiff
path: root/compat/json/compat.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@datawire.io>2022-08-14 20:52:33 -0600
committerLuke Shumaker <lukeshu@datawire.io>2022-08-17 02:02:42 -0600
commit35997d235f3bac7c3f9bcd4b8d2b26b0d88dc387 (patch)
tree47386ceb19133207508c32e3669a483b4d43e7f7 /compat/json/compat.go
parent3ae8e37b8ca2b9a7769d659e134ee2711dc94b89 (diff)
Get the new borrowed tests running right [ci-skip]
Diffstat (limited to 'compat/json/compat.go')
-rw-r--r--compat/json/compat.go37
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 {