feat: Add NetworkError to distinguish between network and API errors #760
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Previously, all Faraday network errors (DNS failures, connection timeouts, SSL errors) were re-raised as generic
Twilio::REST::TwilioError
, making it impossible for consumers to distinguish between retryable network errors and non-retryable API errors.This change introduces a new
Twilio::REST::NetworkError
class that inherits fromTwilioError
and is raised specifically for network-level failures. This allows consumers to implement intelligent retry logic:Changes Made
NetworkError
class inlib/twilio-ruby/framework/rest/error.rb
lib/twilio-ruby/http/http_client.rb
to raiseNetworkError
forFaraday::Error
exceptionsError Classification
NetworkError
(should retry): DNS resolution failures, connection timeouts, network unreachableRestError
(should not retry): HTTP 4xx/5xx responses from Twilio APITwilioError
(base class): Both inherit from this for full backward compatibilityBackward Compatibility
Fully maintained - existing code catching
TwilioError
continues to work unchanged sinceNetworkError
inherits fromTwilioError
.Fixes #689.
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.