...
1 package cbor
2
3 import "fmt"
4
5
6 func (e Encoder) AppendStrings(dst []byte, vals []string) []byte {
7 major := majorTypeArray
8 l := len(vals)
9 if l <= additionalMax {
10 lb := byte(l)
11 dst = append(dst, major|lb)
12 } else {
13 dst = appendCborTypePrefix(dst, major, uint64(l))
14 }
15 for _, v := range vals {
16 dst = e.AppendString(dst, v)
17 }
18 return dst
19 }
20
21
22 func (Encoder) AppendString(dst []byte, s string) []byte {
23 major := majorTypeUtf8String
24
25 l := len(s)
26 if l <= additionalMax {
27 lb := byte(l)
28 dst = append(dst, major|lb)
29 } else {
30 dst = appendCborTypePrefix(dst, majorTypeUtf8String, uint64(l))
31 }
32 return append(dst, s...)
33 }
34
35
36
37 func (e Encoder) AppendStringers(dst []byte, vals []fmt.Stringer) []byte {
38 if len(vals) == 0 {
39 return e.AppendArrayEnd(e.AppendArrayStart(dst))
40 }
41 dst = e.AppendArrayStart(dst)
42 dst = e.AppendStringer(dst, vals[0])
43 if len(vals) > 1 {
44 for _, val := range vals[1:] {
45 dst = e.AppendStringer(dst, val)
46 }
47 }
48 return e.AppendArrayEnd(dst)
49 }
50
51
52
53 func (e Encoder) AppendStringer(dst []byte, val fmt.Stringer) []byte {
54 if val == nil {
55 return e.AppendNil(dst)
56 }
57 return e.AppendString(dst, val.String())
58 }
59
60
61 func (Encoder) AppendBytes(dst, s []byte) []byte {
62 major := majorTypeByteString
63
64 l := len(s)
65 if l <= additionalMax {
66 lb := byte(l)
67 dst = append(dst, major|lb)
68 } else {
69 dst = appendCborTypePrefix(dst, major, uint64(l))
70 }
71 return append(dst, s...)
72 }
73
74
75 func AppendEmbeddedJSON(dst, s []byte) []byte {
76 major := majorTypeTags
77 minor := additionalTypeEmbeddedJSON
78
79
80 dst = append(dst, major|additionalTypeIntUint16)
81 dst = append(dst, byte(minor>>8))
82 dst = append(dst, byte(minor&0xff))
83
84
85 major = majorTypeByteString
86
87 l := len(s)
88 if l <= additionalMax {
89 lb := byte(l)
90 dst = append(dst, major|lb)
91 } else {
92 dst = appendCborTypePrefix(dst, major, uint64(l))
93 }
94 return append(dst, s...)
95 }
96
View as plain text