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.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 {