Skip to content

Commit

Permalink
feat: Manage 'ByteArray' response without 'ApiResponse' model
Browse files Browse the repository at this point in the history
  • Loading branch information
NicolasBourdin88 committed Feb 26, 2025
1 parent 46c2a7e commit b2e788d
Showing 1 changed file with 13 additions and 7 deletions.
20 changes: 13 additions & 7 deletions Legacy/src/main/java/com/infomaniak/lib/core/api/ApiController.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ import com.infomaniak.lib.core.R
import com.infomaniak.lib.core.auth.TokenInterceptorListener
import com.infomaniak.lib.core.models.ApiError
import com.infomaniak.lib.core.models.ApiResponse
import com.infomaniak.lib.core.models.ApiResponseStatus
import com.infomaniak.lib.core.models.ApiResponseStatus.ERROR
import com.infomaniak.lib.core.models.ApiResponseStatus.SUCCESS
import com.infomaniak.lib.core.networking.HttpClient
import com.infomaniak.lib.core.networking.HttpUtils
import com.infomaniak.lib.core.utils.CustomDateTypeAdapter
Expand Down Expand Up @@ -217,8 +217,8 @@ object ApiController {

inline fun <reified T> createApiResponse(useKotlinxSerialization: Boolean, bodyResponse: String, codeResponse: Int): T {
val apiResponse = when {
useKotlinxSerialization -> json.decodeFromString<T>(bodyResponse)
isApiResponseOfByteArray<T>() -> wrapByteArrayResponse<T>(bodyResponse, codeResponse)
useKotlinxSerialization -> json.decodeFromString<T>(bodyResponse)
else -> gson.fromJson(bodyResponse, object : TypeToken<T>() {}.type)
}

Expand All @@ -230,10 +230,15 @@ object ApiController {
}

inline fun <reified T> wrapByteArrayResponse(bodyResponse: String, code: Int): T {
return ApiResponse<ByteArray>(
result = if (code > 200) ApiResponseStatus.UNKNOWN else ApiResponseStatus.SUCCESS,
data = bodyResponse.toByteArray()
) as T
return if (code >= 300) {
createErrorResponse(
translatedError = R.string.anErrorHasOccurred,
apiError = createApiError(false, bodyResponse, exception = ByteArrayException(bodyResponse, code)),
buildErrorResult = null,
)
} else {
ApiResponse<ByteArray>(result = SUCCESS, data = bodyResponse.toByteArray()) as T
}
}

inline fun <reified T> isApiResponseOfByteArray(): Boolean {
Expand Down Expand Up @@ -272,7 +277,8 @@ object ApiController {
}

class NetworkException : Exception()
class ServerErrorException(val bodyResponse: String) : Exception(bodyResponse)
class ServerErrorException(bodyResponse: String) : Exception(bodyResponse)
class ByteArrayException(bodyResponse: String, codeResponse: Int) : Exception("Error $codeResponse: $bodyResponse")

enum class ApiMethod {
GET, PUT, POST, DELETE, PATCH
Expand Down

0 comments on commit b2e788d

Please sign in to comment.