summaryrefslogtreecommitdiff
path: root/encode.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-02-16 21:05:24 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-02-16 21:16:32 -0700
commita6cd78ec94f76feba180fa75e942bb5cdeae115f (patch)
treee0b87c21a23a00c6c1245c269fcb157add1cf19b /encode.go
parentc904fc3e8605ec95c0fac92654d773e8456bf130 (diff)
Move string-encoding to an internal/jsonstring package
Diffstat (limited to 'encode.go')
-rw-r--r--encode.go19
1 files changed, 12 insertions, 7 deletions
diff --git a/encode.go b/encode.go
index d39c862..ebb4568 100644
--- a/encode.go
+++ b/encode.go
@@ -16,6 +16,7 @@ import (
"strings"
"unsafe"
+ "git.lukeshu.com/go/lowmemjson/internal/jsonstring"
"git.lukeshu.com/go/lowmemjson/internal/jsonstruct"
)
@@ -82,7 +83,11 @@ func (enc *Encoder) Encode(obj any) (err error) {
if enc.isRoot {
enc.w.par.Reset()
}
- if err := encode(enc.w, reflect.ValueOf(obj), enc.w.BackslashEscape, false, 0, map[any]struct{}{}); err != nil {
+ escaper := enc.w.BackslashEscape
+ if escaper == nil {
+ escaper = EscapeDefault
+ }
+ if err := encode(enc.w, reflect.ValueOf(obj), escaper, false, 0, map[any]struct{}{}); err != nil {
if rwe, ok := err.(*ReEncodeWriteError); ok {
err = &EncodeWriteError{
Err: rwe.Err,
@@ -192,7 +197,7 @@ func encode(w *ReEncoder, val reflect.Value, escaper BackslashEscaper, quote boo
Err: err,
}
}
- if err := encodeStringFromBytes(w, escaper, text); err != nil {
+ if err := jsonstring.EncodeStringFromBytes(w, escaper, text); err != nil {
return err
}
default:
@@ -295,14 +300,14 @@ func encode(w *ReEncoder, val reflect.Value, escaper BackslashEscaper, quote boo
} else {
if quote {
var buf bytes.Buffer
- if err := encodeStringFromString(&buf, escaper, val.String()); err != nil {
+ if err := jsonstring.EncodeStringFromString(&buf, escaper, val.String()); err != nil {
return err
}
- if err := encodeStringFromBytes(w, escaper, buf.Bytes()); err != nil {
+ if err := jsonstring.EncodeStringFromBytes(w, escaper, buf.Bytes()); err != nil {
return err
}
} else {
- if err := encodeStringFromString(w, escaper, val.String()); err != nil {
+ if err := jsonstring.EncodeStringFromString(w, escaper, val.String()); err != nil {
return err
}
}
@@ -336,7 +341,7 @@ func encode(w *ReEncoder, val reflect.Value, escaper BackslashEscaper, quote boo
}
}
empty = false
- if err := encodeStringFromString(w, escaper, field.Name); err != nil {
+ if err := jsonstring.EncodeStringFromString(w, escaper, field.Name); err != nil {
return err
}
if err := w.WriteByte(':'); err != nil {
@@ -389,7 +394,7 @@ func encode(w *ReEncoder, val reflect.Value, escaper BackslashEscaper, quote boo
}
if !strings.HasPrefix(kStr, `"`) {
k.Reset()
- if err := encodeStringFromString(&k, escaper, kStr); err != nil {
+ if err := jsonstring.EncodeStringFromString(&k, escaper, kStr); err != nil {
return err
}
kStr = k.String()