callHandlers<T> method

FutureOr<APIResponse<T>?> callHandlers<T>(
  1. Iterable<APIRequestHandler> handlers,
  2. APIRequest request, [
  3. String handlersType = 'external'
])

Attempt to process request using an APIRequestHandler at handlers.

Implementation

FutureOr<APIResponse<T>?> callHandlers<T>(
    Iterable<APIRequestHandler> handlers, APIRequest request,
    [String handlersType = 'external']) {
  if (handlers.isEmpty) return null;

  Iterator<APIRequestHandler> handlersIterator = handlers.iterator;

  while (handlersIterator.moveNext()) {
    var handler = handlersIterator.current;

    try {
      var response = handler<T>(this, request);

      if (response == null) continue;

      if (response is APIResponse) {
        return response;
      } else if (response is Future<APIResponse<T>?>) {
        return response.then((resp) {
          if (resp != null) return resp;
          return _callHandlersAsync(handlersIterator, request, handlersType);
        }, onError: (e, s) {
          _logCallHandlersError(handlersType, handler, e, s);
          return _callHandlersAsync(handlersIterator, request, handlersType);
        });
      } else {
        continue;
      }
    } catch (e, s) {
      _logCallHandlersError(handlersType, handler, e, s);
      continue;
    }
  }

  return null;
}