MCPcopy
hub / github.com/redis/go-redis / readRESPCommand

Function readRESPCommand

internal_maint_notif_test.go:127–164  ·  view source on GitHub ↗

readRESPCommand reads a single RESP array command from r and returns its arguments as strings.

(r *bufio.Reader)

Source from the content-addressed store, hash-verified

125// readRESPCommand reads a single RESP array command from r and returns its
126// arguments as strings.
127func readRESPCommand(r *bufio.Reader) ([]string, error) {
128 line, err := r.ReadString('\n')
129 if err != nil {
130 return nil, err
131 }
132 line = strings.TrimRight(line, "\r\n")
133 if !strings.HasPrefix(line, "*") {
134 return nil, fmt.Errorf("expected array header, got %q", line)
135 }
136 n, err := strconv.Atoi(line[1:])
137 if err != nil {
138 return nil, err
139 }
140 args := make([]string, 0, n)
141 for i := 0; i < n; i++ {
142 hdr, err := r.ReadString('\n')
143 if err != nil {
144 return nil, err
145 }
146 hdr = strings.TrimRight(hdr, "\r\n")
147 if !strings.HasPrefix(hdr, "$") {
148 return nil, fmt.Errorf("expected bulk header, got %q", hdr)
149 }
150 length, err := strconv.Atoi(hdr[1:])
151 if err != nil {
152 return nil, err
153 }
154 buf := make([]byte, length)
155 if _, err := io.ReadFull(r, buf); err != nil {
156 return nil, err
157 }
158 if _, err := r.Discard(2); err != nil {
159 return nil, err
160 }
161 args = append(args, string(buf))
162 }
163 return args, nil
164}
165
166func (s *mockRESP2Server) handle(c net.Conn) {
167 defer c.Close()

Callers 4

handleMethod · 0.85
handleMethod · 0.85
handleMethod · 0.85
handleMethod · 0.85

Calls 2

ReadStringMethod · 0.80
DiscardMethod · 0.65

Tested by

no test coverage detected