summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-02-15 15:10:00 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-02-16 22:30:29 -0700
commitf823342d5b9c2ca376d038471889176ab74acf1b (patch)
treef021ae7890922e10a1aa119dcdbd7dd2a587f09e /internal
parent2b7fff828e29b63ae08a871b4b1e74784fab29e5 (diff)
reencode: Don't bother tracking the number of bytes written
Diffstat (limited to 'internal')
-rw-r--r--internal/jsonstring/encode_string.go25
1 files changed, 15 insertions, 10 deletions
diff --git a/internal/jsonstring/encode_string.go b/internal/jsonstring/encode_string.go
index a7670c6..1b0c68a 100644
--- a/internal/jsonstring/encode_string.go
+++ b/internal/jsonstring/encode_string.go
@@ -25,7 +25,7 @@ const (
// BackslashEscaper is describe in the main lowmemjson package docs.
type BackslashEscaper = func(rune, BackslashEscapeMode) BackslashEscapeMode
-func writeStringUnicodeEscape(w io.Writer, c rune) (int, error) {
+func writeStringUnicodeEscape(w io.Writer, c rune) error {
const alphabet = "0123456789abcdef"
buf := [6]byte{
'\\',
@@ -35,10 +35,11 @@ func writeStringUnicodeEscape(w io.Writer, c rune) (int, error) {
alphabet[(c>>4)&0xf],
alphabet[(c>>0)&0xf],
}
- return w.Write(buf[:])
+ _, err := w.Write(buf[:])
+ return err
}
-func writeStringShortEscape(w io.Writer, c rune) (int, error) {
+func writeStringShortEscape(w io.Writer, c rune) error {
var b byte
switch c {
case '"', '\\', '/':
@@ -57,10 +58,11 @@ func writeStringShortEscape(w io.Writer, c rune) (int, error) {
panic(fmt.Errorf("should not happen: writeStringShortEscape called with invalid rune: %q", c))
}
buf := [2]byte{'\\', b}
- return w.Write(buf[:])
+ _, err := w.Write(buf[:])
+ return err
}
-func WriteStringChar(w fastio.AllWriter, c rune, escape BackslashEscapeMode) (int, error) {
+func WriteStringChar(w fastio.AllWriter, c rune, escape BackslashEscapeMode) error {
switch escape {
case BackslashEscapeNone:
switch {
@@ -74,19 +76,22 @@ func WriteStringChar(w fastio.AllWriter, c rune, escape BackslashEscapeMode) (in
case c == '"' || c == '\\': // override, gotta escape these
return writeStringShortEscape(w, c)
default: // obey
- return w.WriteRune(c)
+ _, err := w.WriteRune(c)
+ return err
}
case BackslashEscapeShort:
switch c {
case '"', '\\', '/', '\b', '\f', '\n', '\r', '\t': // obey
return writeStringShortEscape(w, c)
default: // override, can't short-escape these
- return w.WriteRune(c)
+ _, err := w.WriteRune(c)
+ return err
}
case BackslashEscapeUnicode:
switch {
case c > 0xFFFF: // override, can't escape these (TODO: unless we use UTF-16 surrogates?)
- return w.WriteRune(c)
+ _, err := w.WriteRune(c)
+ return err
default: // obey
return writeStringUnicodeEscape(w, c)
}
@@ -100,7 +105,7 @@ func EncodeStringFromString(w fastio.AllWriter, escaper BackslashEscaper, str st
return err
}
for _, c := range str {
- if _, err := WriteStringChar(w, c, escaper(c, BackslashEscapeNone)); err != nil {
+ if err := WriteStringChar(w, c, escaper(c, BackslashEscapeNone)); err != nil {
return err
}
}
@@ -116,7 +121,7 @@ func EncodeStringFromBytes(w fastio.AllWriter, escaper BackslashEscaper, str []b
}
for i := 0; i < len(str); {
c, size := utf8.DecodeRune(str[i:])
- if _, err := WriteStringChar(w, c, escaper(c, BackslashEscapeNone)); err != nil {
+ if err := WriteStringChar(w, c, escaper(c, BackslashEscapeNone)); err != nil {
return err
}
i += size