in protocol.go [48:95]
func ReadNextFull(writeTo *bytes.Buffer, r *bufio.Reader) error {
line, err := r.ReadSlice('\n')
if err != nil {
return err
}
writeTo.Write(line)
line = line[:len(line)-2]
switch line[0] {
case MessageError:
return nil
case MessageStatus:
return nil
case MessageInt:
return nil
case MessageBulk:
l, err := strconv.ParseInt(string(line[1:]), 10, 64)
if err != nil {
return err
}
if l < 0 {
return nil
}
_, err = writeTo.ReadFrom(io.LimitReader(r, l+2))
return err
case MessageMutli:
l, err := strconv.Atoi(string(line[1:]))
if err != nil {
return err
}
if l < 0 {
return nil
}
for i := 0; i < l; i++ {
if err := ReadNextFull(writeTo, r); err != nil {
return err
}
}
return nil
}
return errors.New("redplex/protocol: received illegal data from redis")
}