resolveResponse function

Future<Response> resolveResponse(
  1. Request request,
  2. dynamic result
)

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;
}