resolveResponse function
Resolves a shelf Response from generic result
based on registered ResponseHandler.
Implementation
Future<Response> resolveResponse(Request request, dynamic result) async {
var handlers = <ResponseHandler>[
..._defaultHandlers,
..._associatedResponseHandler(request),
];
var tries = 0;
/// Repeat until result type is shelf [Response]
while (result is! Response) {
var resultHandled = false;
/// Iterate over all registered handlers
for (var handler in handlers) {
var handlerResult = await handler(request, result);
if (handlerResult != null) {
result = handlerResult;
resultHandled = true;
break;
}
}
if (!resultHandled) {
throw ArgumentError(
'No response handler found to handle response type: $result');
}
if (++tries >= _maxTries) {
throw ArgumentError('Can not resolve response.');
}
}
return result;
}