(err error)
| 225 | } |
| 226 | |
| 227 | func isMovedError(err error) (moved bool, ask bool, addr string) { |
| 228 | // Check for typed MovedError |
| 229 | if movedErr, ok := proto.IsMovedError(err); ok { |
| 230 | addr = movedErr.Addr() |
| 231 | addr = internal.GetAddr(addr) |
| 232 | return true, false, addr |
| 233 | } |
| 234 | |
| 235 | // Check for typed AskError |
| 236 | if askErr, ok := proto.IsAskError(err); ok { |
| 237 | addr = askErr.Addr() |
| 238 | addr = internal.GetAddr(addr) |
| 239 | return false, true, addr |
| 240 | } |
| 241 | |
| 242 | // Fallback to string checking for backward compatibility |
| 243 | s := err.Error() |
| 244 | if strings.HasPrefix(s, "MOVED ") { |
| 245 | // Parse: MOVED 3999 127.0.0.1:6381 |
| 246 | parts := strings.Split(s, " ") |
| 247 | if len(parts) == 3 { |
| 248 | addr = internal.GetAddr(parts[2]) |
| 249 | return true, false, addr |
| 250 | } |
| 251 | } |
| 252 | if strings.HasPrefix(s, "ASK ") { |
| 253 | // Parse: ASK 3999 127.0.0.1:6381 |
| 254 | parts := strings.Split(s, " ") |
| 255 | if len(parts) == 3 { |
| 256 | addr = internal.GetAddr(parts[2]) |
| 257 | return false, true, addr |
| 258 | } |
| 259 | } |
| 260 | |
| 261 | return false, false, "" |
| 262 | } |
| 263 | |
| 264 | func isLoadingError(err error) bool { |
| 265 | return proto.IsLoadingError(err) |
no test coverage detected