diff options
Diffstat (limited to 'encode.go')
-rw-r--r-- | encode.go | 40 |
1 files changed, 18 insertions, 22 deletions
@@ -8,7 +8,6 @@ import ( "bytes" "encoding" "encoding/base64" - "encoding/json" "fmt" "io" "reflect" @@ -78,7 +77,7 @@ func NewEncoder(w io.Writer) *Encoder { // may write partial output, whereas encodin/json would not have // written anything. // -// [documentation for encoding/json.Marshal]: https://pkg.go.dev/encoding/json@go1.18#Marshal +// [documentation for encoding/json.Marshal]: https://pkg.go.dev/encoding/json@go1.20#Marshal func (enc *Encoder) Encode(obj any) (err error) { if enc.isRoot { enc.w.par.Reset() @@ -96,12 +95,6 @@ func discardInt(_ int, err error) error { return err } -var ( - encodableType = reflect.TypeOf((*Encodable)(nil)).Elem() - jsonMarshalerType = reflect.TypeOf((*json.Marshaler)(nil)).Elem() - textMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem() -) - const startDetectingCyclesAfter = 1000 func encode(w *ReEncoder, val reflect.Value, escaper BackslashEscaper, quote bool, cycleDepth uint, cycleSeen map[any]struct{}) error { @@ -145,7 +138,7 @@ func encode(w *ReEncoder, val reflect.Value, escaper BackslashEscaper, quote boo if val.Kind() == reflect.Pointer && val.IsNil() { return discardInt(w.WriteString("null")) } - obj, ok := val.Interface().(json.Marshaler) + obj, ok := val.Interface().(jsonMarshaler) if !ok { return discardInt(w.WriteString("null")) } @@ -246,13 +239,27 @@ func encode(w *ReEncoder, val reflect.Value, escaper BackslashEscaper, quote boo return err } } - case reflect.Float32, reflect.Float64: + case reflect.Float32: if quote { if err := w.WriteByte('"'); err != nil { return err } } - if err := encodeTODO(w, val); err != nil { + if err := encodeFloat(w, 32, val); err != nil { + return err + } + if quote { + if err := w.WriteByte('"'); err != nil { + return err + } + } + case reflect.Float64: + if quote { + if err := w.WriteByte('"'); err != nil { + return err + } + } + if err := encodeFloat(w, 64, val); err != nil { return err } if quote { @@ -522,14 +529,3 @@ func encodeArray(w *ReEncoder, val reflect.Value, escaper BackslashEscaper, cycl } return nil } - -func encodeTODO(w io.Writer, val reflect.Value) error { - bs, err := json.Marshal(val.Interface()) - if err != nil { - return err - } - if _, err := w.Write(bs); err != nil { - return err - } - return nil -} |