MCPcopy
hub / github.com/CodisLabs/codis / decodeMultiBulk

Method decodeMultiBulk

pkg/proxy/redis/decoder.go:229–262  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

227}
228
229func (d *Decoder) decodeMultiBulk() ([]*Resp, error) {
230 b, err := d.br.PeekByte()
231 if err != nil {
232 return nil, errors.Trace(err)
233 }
234 if RespType(b) != TypeArray {
235 return d.decodeSingleLineMultiBulk()
236 }
237 if _, err := d.br.ReadByte(); err != nil {
238 return nil, errors.Trace(err)
239 }
240 n, err := d.decodeInt()
241 if err != nil {
242 return nil, errors.Trace(err)
243 }
244 switch {
245 case n <= 0:
246 return nil, errors.Trace(ErrBadArrayLen)
247 case n > MaxArrayLen:
248 return nil, errors.Trace(ErrBadArrayLenTooLong)
249 }
250 multi := make([]*Resp, n)
251 for i := range multi {
252 r, err := d.decodeResp()
253 if err != nil {
254 return nil, err
255 }
256 if r.Type != TypeBulkBytes {
257 return nil, errors.Trace(ErrBadMultiBulkContent)
258 }
259 multi[i] = r
260 }
261 return multi, nil
262}

Callers 1

DecodeMultiBulkMethod · 0.95

Calls 6

decodeIntMethod · 0.95
decodeRespMethod · 0.95
RespTypeTypeAlias · 0.85
PeekByteMethod · 0.80
ReadByteMethod · 0.80

Tested by

no test coverage detected