Discard the data represented by line.
(line []byte)
| 729 | |
| 730 | // Discard the data represented by line. |
| 731 | func (r *Reader) Discard(line []byte) (err error) { |
| 732 | if len(line) == 0 { |
| 733 | return errors.New("redis: invalid line") |
| 734 | } |
| 735 | switch line[0] { |
| 736 | case RespStatus, RespError, RespInt, RespNil, RespFloat, RespBool, RespBigInt: |
| 737 | return nil |
| 738 | } |
| 739 | |
| 740 | n, err := replyLen(line) |
| 741 | if err != nil && err != Nil { |
| 742 | return err |
| 743 | } |
| 744 | |
| 745 | switch line[0] { |
| 746 | case RespBlobError, RespString, RespVerbatim: |
| 747 | // +\r\n |
| 748 | _, err = r.rd.Discard(n + 2) |
| 749 | return err |
| 750 | case RespArray, RespSet, RespPush: |
| 751 | for i := 0; i < n; i++ { |
| 752 | if err = r.DiscardNext(); err != nil { |
| 753 | return err |
| 754 | } |
| 755 | } |
| 756 | return nil |
| 757 | case RespMap, RespAttr: |
| 758 | // Read key & value. |
| 759 | for i := 0; i < n*2; i++ { |
| 760 | if err = r.DiscardNext(); err != nil { |
| 761 | return err |
| 762 | } |
| 763 | } |
| 764 | return nil |
| 765 | } |
| 766 | |
| 767 | return fmt.Errorf("redis: can't parse %.100q", line) |
| 768 | } |
| 769 | |
| 770 | func replyLen(line []byte) (n int, err error) { |
| 771 | n, err = util.Atoi(line[1:]) |
no test coverage detected