@@ -45,6 +45,10 @@ class HttpClient {
4545
4646 Map <String , String > get defaultHeaders => {};
4747
48+ DescopeException ? exceptionFromResponse (String response) {
49+ return null ;
50+ }
51+
4852 // Internal
4953
5054 Future <T > call <T >(http.Request request, ResponseDecoder <T > decoder) async {
@@ -90,8 +94,10 @@ class HttpClient {
9094 }
9195
9296 String parseResponse (http.Response response) {
93- throwErrorIfNeeded (response.statusCode);
94- return response.body;
97+ if (response.statusCode >= 200 && response.statusCode <= 299 ) {
98+ return response.body;
99+ }
100+ throw exceptionFromResponse (response.body) ?? generalServerError (response.statusCode);
95101 }
96102}
97103
@@ -113,32 +119,29 @@ extension CompactMap<T> on Map<String, T?> {
113119
114120const String invalidResponse = 'The server returned an unexpected response' ;
115121
116- void throwErrorIfNeeded (int statusCode) {
117- final desc = errorDescriptionFromCode (statusCode);
118- if (desc != null ) {
119- throw InternalErrors .httpError.add (desc: desc);
120- }
121- }
122-
123- String ? errorDescriptionFromCode (int statusCode) {
124- if (statusCode >= 200 && statusCode <= 299 ) {
125- return null ;
126- }
122+ DescopeException generalServerError (int statusCode) {
123+ String desc;
127124 switch (statusCode) {
128125 case 400 :
129- return 'The request was invalid' ;
126+ desc = 'The request was invalid' ;
127+ break ;
130128 case 401 :
131- return 'The request was unauthorized' ;
129+ desc = 'The request was unauthorized' ;
130+ break ;
132131 case 403 :
133- return 'The request was forbidden' ;
132+ desc = 'The request was forbidden' ;
133+ break ;
134134 case 404 :
135- return 'The resource was not found' ;
135+ desc = 'The resource was not found' ;
136+ break ;
136137 case 500 :
137138 case 503 :
138- return "The server failed with status code $statusCode " ;
139+ desc = "The server failed with status code $statusCode " ;
140+ break ;
139141 default :
140- return statusCode >= 500 ? 'The server was unreachable' : "The server returned status code $statusCode " ;
142+ desc = statusCode >= 500 ? 'The server was unreachable' : "The server returned status code $statusCode " ;
141143 }
144+ return InternalErrors .httpError.add (desc: desc);
142145}
143146
144147// Default Network Client
0 commit comments