MCPcopy Create free account
hub / github.com/OpenAtomFoundation/pikiwidb / decodeMultiBulk

Method decodeMultiBulk

codis/pkg/proxy/redis/decoder.go:232–265  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

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

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