package channels import ( "fmt" "net/http" ) // ClassifySendError wraps a raw error with the appropriate sentinel based on // an HTTP status code. Channels that perform HTTP API calls should use this // in their Send path. func ClassifySendError(statusCode int, rawErr error) error { switch { case statusCode == http.StatusTooManyRequests: return fmt.Errorf("%w: %v", ErrRateLimit, rawErr) case statusCode >= 500: return fmt.Errorf("%w: %v", ErrTemporary, rawErr) case statusCode >= 400: return fmt.Errorf("%w: %v", ErrSendFailed, rawErr) default: return rawErr } } // ClassifyNetError wraps a network/timeout error as ErrTemporary. func ClassifyNetError(err error) error { if err == nil { return nil } return fmt.Errorf("%w: %v", ErrTemporary, err) }