package types
import (
)
func ( []byte, interface{}, int) []byte {
switch v := .(type) {
case nil:
return AppendNull(, )
case bool:
return appendBool(, )
case int32:
return strconv.AppendInt(, int64(), 10)
case int64:
return strconv.AppendInt(, , 10)
case int:
return strconv.AppendInt(, int64(), 10)
case float32:
return appendFloat(, float64(), , 32)
case float64:
return appendFloat(, , , 64)
case string:
return AppendString(, , )
case time.Time:
return AppendTime(, , )
case []byte:
return AppendBytes(, , )
case ValueAppender:
return appendAppender(, , )
default:
return appendValue(, reflect.ValueOf(), )
}
}
func ( []byte, error) []byte {
= append(, "?!("...)
= append(, .Error()...)
= append(, ')')
return
}
func ( []byte, int) []byte {
if hasFlag(, quoteFlag) {
return append(, "NULL"...)
}
return nil
}
func ( []byte, bool) []byte {
if {
return append(, "TRUE"...)
}
return append(, "FALSE"...)
}
func ( []byte, float64, int, int) []byte {
if hasFlag(, arrayFlag) {
return appendFloat2(, , )
}
switch {
case math.IsNaN():
if hasFlag(, quoteFlag) {
return append(, "'NaN'"...)
}
return append(, "NaN"...)
case math.IsInf(, 1):
if hasFlag(, quoteFlag) {
return append(, "'Infinity'"...)
}
return append(, "Infinity"...)
case math.IsInf(, -1):
if hasFlag(, quoteFlag) {
return append(, "'-Infinity'"...)
}
return append(, "-Infinity"...)
default:
return strconv.AppendFloat(, , 'f', -1, )
}
}
func ( []byte, float64, int) []byte {
switch {
case math.IsNaN():
return append(, "NaN"...)
case math.IsInf(, 1):
return append(, "Infinity"...)
case math.IsInf(, -1):
return append(, "-Infinity"...)
default:
return strconv.AppendFloat(, , 'f', -1, 64)
}
}
func ( []byte, string, int) []byte {
if hasFlag(, arrayFlag) {
return appendString2(, , )
}
if hasFlag(, quoteFlag) {
= append(, '\'')
for , := range {
if == '\000' {
continue
}
if == '\'' {
= append(, '\'', '\'')
} else {
= appendRune(, )
}
}
= append(, '\'')
return
}
for , := range {
if != '\000' {
= appendRune(, )
}
}
return
}
func ( []byte, string, int) []byte {
= append(, '"')
for , := range {
if == '\000' {
continue
}
switch {
case '\'':
if hasFlag(, quoteFlag) {
= append(, '\'')
}
= append(, '\'')
case '"':
= append(, '\\', '"')
case '\\':
= append(, '\\', '\\')
default:
= appendRune(, )
}
}
= append(, '"')
return
}
func ( []byte, rune) []byte {
if < utf8.RuneSelf {
return append(, byte())
}
:= len()
if cap()- < utf8.UTFMax {
= append(, make([]byte, utf8.UTFMax)...)
}
:= utf8.EncodeRune([:+utf8.UTFMax], )
return [:+]
}
func ( []byte, []byte, int) []byte {
if == nil {
return AppendNull(, )
}
if hasFlag(, arrayFlag) {
= append(, `"\`...)
} else if hasFlag(, quoteFlag) {
= append(, '\'')
}
= append(, `\x`...)
:= len()
= append(, make([]byte, hex.EncodedLen(len()))...)
hex.Encode([:], )
if hasFlag(, arrayFlag) {
= append(, '"')
} else if hasFlag(, quoteFlag) {
= append(, '\'')
}
return
}
func ( []byte, ValueAppender, int) []byte {
, := .AppendValue(, )
if != nil {
return AppendError(, )
}
return
}