in marshaler.go [65:139]
func Marshal(w *Writer, v interface{}) error {
switch v := v.(type) {
case nil:
w.RawString("null")
case string:
w.String(v)
case uint:
w.Uint64(uint64(v))
case uint8:
w.Uint64(uint64(v))
case uint16:
w.Uint64(uint64(v))
case uint32:
w.Uint64(uint64(v))
case uint64:
w.Uint64(v)
case int:
w.Int64(int64(v))
case int8:
w.Int64(int64(v))
case int16:
w.Int64(int64(v))
case int32:
w.Int64(int64(v))
case int64:
w.Int64(v)
case float32:
if math.IsNaN(float64(v)) {
return errors.New("json: unsupported value: NaN")
}
if math.IsInf(float64(v), 0) {
return errors.New("json: unsupported value: Inf")
}
w.Float32(v)
case float64:
if math.IsNaN(v) {
return errors.New("json: unsupported value: NaN")
}
if math.IsInf(v, 0) {
return errors.New("json: unsupported value: Inf")
}
w.Float64(v)
case bool:
w.Bool(v)
case map[string]interface{}:
if v == nil {
w.RawString("null")
return nil
}
w.RawByte('{')
var firstErr error
first := true
for k, v := range v {
if first {
first = false
} else {
w.RawByte(',')
}
w.String(k)
w.RawByte(':')
if err := Marshal(w, v); err != nil && firstErr == nil {
firstErr = err
}
}
w.RawByte('}')
return firstErr
case Marshaler:
return v.MarshalFastJSON(w)
case Appender:
w.buf = v.AppendJSON(w.buf)
default:
return marshalReflect(w, v)
}
return nil
}