package internal

import (
	
	
	
	
)

func ( []byte,  interface{}) []byte {
	switch v := .(type) {
	case nil:
		return append(, "<nil>"...)
	case string:
		return appendUTF8String(, Bytes())
	case []byte:
		return appendUTF8String(, )
	case int:
		return strconv.AppendInt(, int64(), 10)
	case int8:
		return strconv.AppendInt(, int64(), 10)
	case int16:
		return strconv.AppendInt(, int64(), 10)
	case int32:
		return strconv.AppendInt(, int64(), 10)
	case int64:
		return strconv.AppendInt(, , 10)
	case uint:
		return strconv.AppendUint(, uint64(), 10)
	case uint8:
		return strconv.AppendUint(, uint64(), 10)
	case uint16:
		return strconv.AppendUint(, uint64(), 10)
	case uint32:
		return strconv.AppendUint(, uint64(), 10)
	case uint64:
		return strconv.AppendUint(, , 10)
	case float32:
		return strconv.AppendFloat(, float64(), 'f', -1, 64)
	case float64:
		return strconv.AppendFloat(, , 'f', -1, 64)
	case bool:
		if  {
			return append(, "true"...)
		}
		return append(, "false"...)
	case time.Time:
		return .AppendFormat(, time.RFC3339Nano)
	default:
		return append(, fmt.Sprint()...)
	}
}

func ( []byte,  []byte) []byte {
	if isSimple() {
		 = append(, ...)
		return 
	}

	 := len()
	 = append(, make([]byte, hex.EncodedLen(len()))...)
	hex.Encode([:], )
	return 
}

func ( []byte) bool {
	for ,  := range  {
		if !isSimpleByte() {
			return false
		}
	}
	return true
}

func ( byte) bool {
	return simple[]
}

var simple = [256]bool{
	'-': true,
	'_': true,

	'0': true,
	'1': true,
	'2': true,
	'3': true,
	'4': true,
	'5': true,
	'6': true,
	'7': true,
	'8': true,
	'9': true,

	'a': true,
	'b': true,
	'c': true,
	'd': true,
	'e': true,
	'f': true,
	'g': true,
	'h': true,
	'i': true,
	'j': true,
	'k': true,
	'l': true,
	'm': true,
	'n': true,
	'o': true,
	'p': true,
	'q': true,
	'r': true,
	's': true,
	't': true,
	'u': true,
	'v': true,
	'w': true,
	'x': true,
	'y': true,
	'z': true,

	'A': true,
	'B': true,
	'C': true,
	'D': true,
	'E': true,
	'F': true,
	'G': true,
	'H': true,
	'I': true,
	'J': true,
	'K': true,
	'L': true,
	'M': true,
	'N': true,
	'O': true,
	'P': true,
	'Q': true,
	'R': true,
	'S': true,
	'T': true,
	'U': true,
	'V': true,
	'W': true,
	'X': true,
	'Y': true,
	'Z': true,