getSaveResponse<ContainerDataTypeGeneric> method
Implementation
Future<CloudflareHTTPResponse> getSaveResponse<ContainerDataTypeGeneric>(
Future futureResponse,
{bool parseCloudflareResponse = true}) async {
CloudflareHTTPResponse response = CloudflareHTTPResponse(
http.Response('', HttpStatus.notFound),
null,
);
CloudflareHTTPResponse httpResponseToCustomHttpResponse(
HttpResponse response) {
dynamic body = response.data;
CloudflareErrorResponse? error;
if (parseCloudflareResponse) {
if (body is Map<String, dynamic>) {
body = CloudflareResponse.fromJson(body);
} else if (body is String) {
body = CloudflareResponse().fromJsonString(body);
}
if (body is CloudflareResponse && !body.success) {
error = CloudflareErrorResponse(
errors: body.errors,
messages: body.messages,
);
}
}
return CloudflareHTTPResponse(
http.Response(
'',
response.response.statusCode ?? HttpStatus.notFound,
headers: MapUtils.parseHeaders(response.response.headers) ?? {},
isRedirect: response.response.isRedirect,
request: http.Request(
response.response.requestOptions.method,
response.response.requestOptions.uri,
),
),
body,
error: error,
extraData: response);
}
CloudflareHTTPResponse<CloudflareResponse> dioErrorToCustomHttpResponse(
dio.DioException error) =>
CloudflareHTTPResponse(
http.Response(
'',
error.response?.statusCode ?? HttpStatus.notFound,
headers: MapUtils.parseHeaders(error.response?.headers) ?? {},
isRedirect: error.response?.isRedirect ?? false,
request: http.Request(
error.response?.requestOptions.method ?? HttpMethod.GET,
error.response?.requestOptions.uri ?? Uri(),
),
),
null,
error: error.response?.data ??
CloudflareErrorResponse(
errors: [ErrorInfo(message: error.message)],
),
extraData: error);
try {
final HttpResponse httpResponse = await futureResponse;
response = httpResponseToCustomHttpResponse(httpResponse);
} catch (e) {
if (e is HttpResponse) {
response = httpResponseToCustomHttpResponse(e);
} else if (e is dio.DioException) {
switch (e.type) {
case dio.DioExceptionType.connectionTimeout:
case dio.DioExceptionType.receiveTimeout:
case dio.DioExceptionType.sendTimeout:
throw TimeoutException(e.message);
default:
}
if (e.error is Exception) throw e.error as Exception;
response = dioErrorToCustomHttpResponse(e);
} else {
rethrow;
}
}
return response;
}