]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blame - vendor/github.com/vmihailenco/msgpack/decode_string.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / vmihailenco / msgpack / decode_string.go
CommitLineData
107c1cdb
ND
1package msgpack
2
3import (
4 "fmt"
5 "reflect"
6
7 "github.com/vmihailenco/msgpack/codes"
8)
9
10func (d *Decoder) bytesLen(c codes.Code) (int, error) {
11 if c == codes.Nil {
12 return -1, nil
13 } else if codes.IsFixedString(c) {
14 return int(c & codes.FixedStrMask), nil
15 }
16 switch c {
17 case codes.Str8, codes.Bin8:
18 n, err := d.uint8()
19 return int(n), err
20 case codes.Str16, codes.Bin16:
21 n, err := d.uint16()
22 return int(n), err
23 case codes.Str32, codes.Bin32:
24 n, err := d.uint32()
25 return int(n), err
26 }
27 return 0, fmt.Errorf("msgpack: invalid code=%x decoding bytes length", c)
28}
29
30func (d *Decoder) DecodeString() (string, error) {
31 c, err := d.readCode()
32 if err != nil {
33 return "", err
34 }
35 return d.string(c)
36}
37
38func (d *Decoder) string(c codes.Code) (string, error) {
39 n, err := d.bytesLen(c)
40 if err != nil {
41 return "", err
42 }
43 if n == -1 {
44 return "", nil
45 }
46 b, err := d.readN(n)
47 return string(b), err
48}
49
50func decodeStringValue(d *Decoder, v reflect.Value) error {
51 s, err := d.DecodeString()
52 if err != nil {
53 return err
54 }
55 if err = mustSet(v); err != nil {
56 return err
57 }
58 v.SetString(s)
59 return nil
60}
61
62func (d *Decoder) DecodeBytesLen() (int, error) {
63 c, err := d.readCode()
64 if err != nil {
65 return 0, err
66 }
67 return d.bytesLen(c)
68}
69
70func (d *Decoder) DecodeBytes() ([]byte, error) {
71 c, err := d.readCode()
72 if err != nil {
73 return nil, err
74 }
75 return d.bytes(c, nil)
76}
77
78func (d *Decoder) bytes(c codes.Code, b []byte) ([]byte, error) {
79 n, err := d.bytesLen(c)
80 if err != nil {
81 return nil, err
82 }
83 if n == -1 {
84 return nil, nil
85 }
86 return readN(d.r, b, n)
87}
88
89func (d *Decoder) bytesNoCopy() ([]byte, error) {
90 c, err := d.readCode()
91 if err != nil {
92 return nil, err
93 }
94 n, err := d.bytesLen(c)
95 if err != nil {
96 return nil, err
97 }
98 if n == -1 {
99 return nil, nil
100 }
101 return d.readN(n)
102}
103
104func (d *Decoder) decodeBytesPtr(ptr *[]byte) error {
105 c, err := d.readCode()
106 if err != nil {
107 return err
108 }
109 return d.bytesPtr(c, ptr)
110}
111
112func (d *Decoder) bytesPtr(c codes.Code, ptr *[]byte) error {
113 n, err := d.bytesLen(c)
114 if err != nil {
115 return err
116 }
117 if n == -1 {
118 *ptr = nil
119 return nil
120 }
121
122 *ptr, err = readN(d.r, *ptr, n)
123 return err
124}
125
126func (d *Decoder) skipBytes(c codes.Code) error {
127 n, err := d.bytesLen(c)
128 if err != nil {
129 return err
130 }
131 if n == -1 {
132 return nil
133 }
134 return d.skipN(n)
135}
136
137func decodeBytesValue(d *Decoder, v reflect.Value) error {
138 c, err := d.readCode()
139 if err != nil {
140 return err
141 }
142
143 b, err := d.bytes(c, v.Bytes())
144 if err != nil {
145 return err
146 }
147
148 if err = mustSet(v); err != nil {
149 return err
150 }
151 v.SetBytes(b)
152
153 return nil
154}
155
156func decodeByteArrayValue(d *Decoder, v reflect.Value) error {
157 c, err := d.readCode()
158 if err != nil {
159 return err
160 }
161
162 n, err := d.bytesLen(c)
163 if err != nil {
164 return err
165 }
166 if n == -1 {
167 return nil
168 }
169 if n > v.Len() {
170 return fmt.Errorf("%s len is %d, but msgpack has %d elements", v.Type(), v.Len(), n)
171 }
172
173 b := v.Slice(0, n).Bytes()
174 return d.readFull(b)
175}