summaryrefslogtreecommitdiff
path: root/encode_string.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-01-27 01:24:02 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-01-30 22:00:25 -0700
commitd5b1b73eaaa060ef468f20d8b9eed029eb60ce45 (patch)
tree6b85c8e28ae10cd5ae5de1242bcc34cc91b6a183 /encode_string.go
parent2828fa21c0ffd2a32a108b37c0417b01abc42929 (diff)
encode: Don't use panic for flow-control
Diffstat (limited to 'encode_string.go')
-rw-r--r--encode_string.go38
1 files changed, 28 insertions, 10 deletions
diff --git a/encode_string.go b/encode_string.go
index 831a038..12f934e 100644
--- a/encode_string.go
+++ b/encode_string.go
@@ -83,29 +83,47 @@ func writeStringChar(w internal.AllWriter, c rune, wasEscaped BackslashEscapeMod
}
}
-func encodeStringFromString(w internal.AllWriter, escaper BackslashEscaper, str string) {
- encodeWriteByte(w, '"')
+func encodeStringFromString(w internal.AllWriter, escaper BackslashEscaper, str string) error {
+ if err := w.WriteByte('"'); err != nil {
+ return err
+ }
for _, c := range str {
if _, err := writeStringChar(w, c, BackslashEscapeNone, escaper); err != nil {
- panic(encodeError{err})
+ return err
}
}
- encodeWriteByte(w, '"')
+ if err := w.WriteByte('"'); err != nil {
+ return err
+ }
+ return nil
}
-func encodeStringFromBytes(w internal.AllWriter, escaper BackslashEscaper, str []byte) {
- encodeWriteByte(w, '"')
+func encodeStringFromBytes(w internal.AllWriter, escaper BackslashEscaper, str []byte) error {
+ if err := w.WriteByte('"'); err != nil {
+ return err
+ }
for i := 0; i < len(str); {
c, size := utf8.DecodeRune(str[i:])
if _, err := writeStringChar(w, c, BackslashEscapeNone, escaper); err != nil {
- panic(encodeError{err})
+ return err
}
i += size
}
- encodeWriteByte(w, '"')
+ if err := w.WriteByte('"'); err != nil {
+ return err
+ }
+ return nil
}
func init() {
- internal.EncodeStringFromString = func(w io.Writer, s string) { encodeStringFromString(internal.NewAllWriter(w), nil, s) }
- internal.EncodeStringFromBytes = func(w io.Writer, s []byte) { encodeStringFromBytes(internal.NewAllWriter(w), nil, s) }
+ internal.EncodeStringFromString = func(w io.Writer, s string) {
+ if err := encodeStringFromString(internal.NewAllWriter(w), nil, s); err != nil {
+ panic(err)
+ }
+ }
+ internal.EncodeStringFromBytes = func(w io.Writer, s []byte) {
+ if err := encodeStringFromBytes(internal.NewAllWriter(w), nil, s); err != nil {
+ panic(err)
+ }
+ }
}