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