From 3b7a9c5d7abb754199f9d7a7a01a0c685d1bdb3d Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Thu, 20 Jun 2024 12:48:13 -0400 Subject: [PATCH] chore: improve error typing for submit Intent failures Signed-off-by: Brandon McAnsh --- .../repository/TransactionRepository.kt | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/com/getcode/network/repository/TransactionRepository.kt b/api/src/main/java/com/getcode/network/repository/TransactionRepository.kt index 8e78a83d5..7c748e7cf 100644 --- a/api/src/main/java/com/getcode/network/repository/TransactionRepository.kt +++ b/api/src/main/java/com/getcode/network/repository/TransactionRepository.kt @@ -722,14 +722,32 @@ class TransactionRepository @Inject constructor( sealed class ErrorSubmitIntent(val value: Int) { data class Denied(val reasons: List = emptyList()): ErrorSubmitIntent(0) - data object InvalidIntent: ErrorSubmitIntent(1) + data class InvalidIntent(val reasons: List): ErrorSubmitIntent(1) data object SignatureError: ErrorSubmitIntent(2) - data object StaleState: ErrorSubmitIntent(3) + data class StaleState(val reasons: List): ErrorSubmitIntent(3) data object Unknown: ErrorSubmitIntent(-1) data object DeviceTokenUnavailable: ErrorSubmitIntent(-2) + override fun toString(): String { + return when (this) { + is Denied -> "denied(${reasons.joinToString()})" + DeviceTokenUnavailable -> "deviceTokenUnavailable" + is InvalidIntent -> "invalidIntent(${reasons.joinToString()})" + SignatureError -> "signatureError" + is StaleState -> "staleState(${reasons.joinToString()})" + Unknown -> "unknown" + } + } + companion object { operator fun invoke(proto: SubmitIntentResponse.Error): ErrorSubmitIntent { + val reasonStrings = proto.errorDetailsList.mapNotNull { + when (it.typeCase) { + TransactionService.ErrorDetails.TypeCase.REASON_STRING -> + it.reasonString.reason.takeIf { reason -> reason.isNotEmpty() } + else -> null + } + } return when (proto.code) { SubmitIntentResponse.Error.Code.DENIED -> { val reasons = proto.errorDetailsList.mapNotNull { @@ -739,9 +757,9 @@ class TransactionRepository @Inject constructor( Denied(reasons) } - SubmitIntentResponse.Error.Code.INVALID_INTENT -> InvalidIntent + SubmitIntentResponse.Error.Code.INVALID_INTENT -> InvalidIntent(reasonStrings) SubmitIntentResponse.Error.Code.SIGNATURE_ERROR -> SignatureError - SubmitIntentResponse.Error.Code.STALE_STATE -> StaleState + SubmitIntentResponse.Error.Code.STALE_STATE -> StaleState(reasonStrings) SubmitIntentResponse.Error.Code.UNRECOGNIZED -> Unknown else -> return Unknown }