(rd *proto.Reader)
| 2150 | return cmd.rawVal, cmd.err |
| 2151 | } |
| 2152 | func (cmd *FTInfoCmd) readReply(rd *proto.Reader) (err error) { |
| 2153 | readType, err := rd.PeekReplyType() |
| 2154 | if err != nil { |
| 2155 | return err |
| 2156 | } |
| 2157 | |
| 2158 | // RESP3 returns a map, RESP2 returns an array |
| 2159 | if readType == proto.RespMap { |
| 2160 | // Read raw response first for backwards compatibility |
| 2161 | cmd.rawVal, err = rd.ReadReply() |
| 2162 | if err != nil { |
| 2163 | return err |
| 2164 | } |
| 2165 | |
| 2166 | // Convert map[interface{}]interface{} to map[string]interface{} |
| 2167 | rawMap, ok := cmd.rawVal.(map[interface{}]interface{}) |
| 2168 | if !ok { |
| 2169 | return fmt.Errorf("unexpected RESP3 response type: %T", cmd.rawVal) |
| 2170 | } |
| 2171 | |
| 2172 | data := make(map[string]interface{}, len(rawMap)) |
| 2173 | for k, v := range rawMap { |
| 2174 | if kStr, ok := k.(string); ok { |
| 2175 | data[kStr] = v |
| 2176 | } |
| 2177 | } |
| 2178 | |
| 2179 | cmd.val, err = parseFTInfo(data) |
| 2180 | return err |
| 2181 | } |
| 2182 | |
| 2183 | // RESP2 format - read as map |
| 2184 | n, err := rd.ReadMapLen() |
| 2185 | if err != nil { |
| 2186 | return err |
| 2187 | } |
| 2188 | |
| 2189 | data := make(map[string]interface{}, n) |
| 2190 | for i := 0; i < n; i++ { |
| 2191 | k, err := rd.ReadString() |
| 2192 | if err != nil { |
| 2193 | return err |
| 2194 | } |
| 2195 | v, err := rd.ReadReply() |
| 2196 | if err != nil { |
| 2197 | if err == Nil { |
| 2198 | data[k] = Nil |
| 2199 | continue |
| 2200 | } |
| 2201 | if err, ok := err.(proto.RedisError); ok { |
| 2202 | data[k] = err |
| 2203 | continue |
| 2204 | } |
| 2205 | return err |
| 2206 | } |
| 2207 | data[k] = v |
| 2208 | } |
| 2209 | cmd.val, err = parseFTInfo(data) |
nothing calls this directly
no test coverage detected