func writeReadLine(rw *bufio.ReadWriter, format string, args ...interface{}) ([]byte, error) { _, err := fmt.Fprintf(rw, format, args...) if err != nil { return nil, err } if err := rw.Flush(); err != nil { return nil, err } line, err := rw.ReadSlice('\n') return line, err }
func (c *Client) populateOne(rw *bufio.ReadWriter, verb string, item *Item) error { if !legalKey(item.Key) { return ErrMalformedKey } var err error if verb == "cas" { _, err = fmt.Fprintf(rw, "%s %s %d %d %d %d\r\n", verb, item.Key, item.Flags, item.Expiration, len(item.Value), item.casid) } else { _, err = fmt.Fprintf(rw, "%s %s %d %d %d\r\n", verb, item.Key, item.Flags, item.Expiration, len(item.Value)) } if err != nil { return err } if _, err = rw.Write(item.Value); err != nil { return err } if _, err := rw.Write(crlf); err != nil { return err } if err := rw.Flush(); err != nil { return err } line, err := rw.ReadSlice('\n') if err != nil { return err } switch { case bytes.Equal(line, resultStored): return nil case bytes.Equal(line, resultNotStored): return ErrNotStored case bytes.Equal(line, resultExists): return ErrCASConflict case bytes.Equal(line, resultNotFound): return ErrCacheMiss } return fmt.Errorf("memcache: unexpected response line from %q: %q", verb, string(line)) }