errorFromProblem function

FFXApiError errorFromProblem(
  1. Map<String, Object?> problem,
  2. int status,
  3. int? retryAfterMs
)

Maps a problem+json document to its typed error (14 ยง10).

Implementation

FFXApiError errorFromProblem(
  Map<String, Object?> problem,
  int status,
  int? retryAfterMs,
) {
  final code = (problem['code'] as String?) ?? 'unknownValue';
  if (_functionCodes.contains(code)) {
    return FFXFunctionError(problem, status, retryAfterMs);
  }
  if (_validationCodes.contains(code)) {
    return FFXValidationError(problem, status);
  }
  if (_authenticationCodes.contains(code)) {
    return FFXAuthenticationError(problem, status);
  }
  if (code == 'permissionDenied' ||
      code == 'downloadTokenInvalid' ||
      code == 'challengeRequired') {
    return FFXPermissionDeniedError(problem, status);
  }
  if (_notFoundCodes.contains(code)) return FFXNotFoundError(problem, status);
  if (code == 'insufficientCredits') {
    return FFXInsufficientCreditsError(problem, status);
  }
  if (_conflictCodes.contains(code)) return FFXConflictError(problem, status);
  if (code == 'versionConflict') {
    return FFXVersionConflictError(problem, status);
  }
  if (code == 'configVersionRetired') {
    return FFXConfigVersionRetiredError(problem, status);
  }
  if (_tooLargeCodes.contains(code)) {
    return FFXRequestTooLargeError(problem, status);
  }
  if (code == 'quotaExceeded') {
    return FFXQuotaExceededError(problem, status, retryAfterMs);
  }
  if (code == 'rateLimited' || code == 'accountLocked') {
    return FFXRateLimitedError(problem, status, retryAfterMs);
  }
  if (_unavailableCodes.contains(code)) {
    return FFXServiceUnavailableError(problem, status, retryAfterMs);
  }
  if (code == 'queryTimeout' || code == 'connectorOutcomeUnknown') {
    return FFXTimeoutError(problem, status);
  }
  if (code == 'internalError') return FFXInternalError(problem, status);
  return FFXUnknownError(problem, status);
}