createApiException function

ApiException createApiException({
  1. required int statusCode,
  2. required String message,
  3. String? type,
  4. String? code,
  5. String? param,
  6. String? requestId,
  7. Map<String, dynamic>? body,
  8. Duration? retryAfter,
  9. Object? cause,
})

Creates the appropriate exception based on HTTP status code.

This factory function examines the response and creates the most specific exception type for the given error.

Implementation

ApiException createApiException({
  required int statusCode,
  required String message,
  String? type,
  String? code,
  String? param,
  String? requestId,
  Map<String, dynamic>? body,
  Duration? retryAfter,
  Object? cause,
}) {
  return switch (statusCode) {
    400 => BadRequestException(
      message: message,
      type: type,
      code: code,
      param: param,
      requestId: requestId,
      body: body,
      cause: cause,
    ),
    401 => AuthenticationException(
      message: message,
      type: type,
      code: code,
      param: param,
      requestId: requestId,
      body: body,
      cause: cause,
    ),
    403 => PermissionDeniedException(
      message: message,
      type: type,
      code: code,
      param: param,
      requestId: requestId,
      body: body,
      cause: cause,
    ),
    404 => NotFoundException(
      message: message,
      type: type,
      code: code,
      param: param,
      requestId: requestId,
      body: body,
      cause: cause,
    ),
    409 => ConflictException(
      message: message,
      type: type,
      code: code,
      param: param,
      requestId: requestId,
      body: body,
      cause: cause,
    ),
    422 => UnprocessableEntityException(
      message: message,
      type: type,
      code: code,
      param: param,
      requestId: requestId,
      body: body,
      cause: cause,
    ),
    429 => RateLimitException(
      message: message,
      type: type,
      code: code,
      param: param,
      requestId: requestId,
      body: body,
      retryAfter: retryAfter,
      cause: cause,
    ),
    >= 500 && < 600 => InternalServerException(
      message: message,
      statusCode: statusCode,
      type: type,
      code: code,
      param: param,
      requestId: requestId,
      body: body,
      cause: cause,
    ),
    _ => ApiException(
      message: message,
      statusCode: statusCode,
      type: type,
      code: code,
      param: param,
      requestId: requestId,
      body: body,
      cause: cause,
    ),
  };
}