errorFromProblem function
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);
}