blob: b97fa0d6851796b3e48a080e0b5b1f687557a906 [file] [log] [blame]
Joey Armstrong903c69d2024-02-01 19:46:39 -05001package internal
2
3import (
4 "fmt"
5 "strconv"
6 "time"
7)
8
9func AppendArg(b []byte, v interface{}) []byte {
10 switch v := v.(type) {
11 case nil:
12 return append(b, "<nil>"...)
13 case string:
14 return appendUTF8String(b, Bytes(v))
15 case []byte:
16 return appendUTF8String(b, v)
17 case int:
18 return strconv.AppendInt(b, int64(v), 10)
19 case int8:
20 return strconv.AppendInt(b, int64(v), 10)
21 case int16:
22 return strconv.AppendInt(b, int64(v), 10)
23 case int32:
24 return strconv.AppendInt(b, int64(v), 10)
25 case int64:
26 return strconv.AppendInt(b, v, 10)
27 case uint:
28 return strconv.AppendUint(b, uint64(v), 10)
29 case uint8:
30 return strconv.AppendUint(b, uint64(v), 10)
31 case uint16:
32 return strconv.AppendUint(b, uint64(v), 10)
33 case uint32:
34 return strconv.AppendUint(b, uint64(v), 10)
35 case uint64:
36 return strconv.AppendUint(b, v, 10)
37 case float32:
38 return strconv.AppendFloat(b, float64(v), 'f', -1, 64)
39 case float64:
40 return strconv.AppendFloat(b, v, 'f', -1, 64)
41 case bool:
42 if v {
43 return append(b, "true"...)
44 }
45 return append(b, "false"...)
46 case time.Time:
47 return v.AppendFormat(b, time.RFC3339Nano)
48 default:
49 return append(b, fmt.Sprint(v)...)
50 }
51}
52
53func appendUTF8String(dst []byte, src []byte) []byte {
54 dst = append(dst, src...)
55 return dst
56}