func Marshal()

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
}