Coverage Summary for Class: SyncError (com.georgeci.moneysurfer.sync.api)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| SyncError$AuthRequired |
100%
(1/1)
|
|
100%
(1/1)
|
100%
(1/1)
|
| SyncError$Cancelled |
100%
(1/1)
|
|
100%
(1/1)
|
100%
(1/1)
|
| SyncError$NetworkUnavailable |
100%
(1/1)
|
|
100%
(1/1)
|
100%
(3/3)
|
| SyncError$PermissionDenied |
100%
(1/1)
|
|
100%
(1/1)
|
100%
(1/1)
|
| SyncError$StorageError |
100%
(2/2)
|
|
100%
(2/2)
|
100%
(9/9)
|
| SyncError$Unknown |
100%
(1/1)
|
|
100%
(2/2)
|
100%
(12/12)
|
| SyncError$UnsupportedAppVersion |
100%
(2/2)
|
|
100%
(2/2)
|
100%
(9/9)
|
| Total |
100%
(9/9)
|
|
100%
(10/10)
|
100%
(36/36)
|
package com.georgeci.moneysurfer.sync.api
import arrow.core.Either
/**
* Standalone sync error type — NOT nested under any common `AppError`.
* See SyncCoordinatorFAQ.md №11, №12.
*/
sealed interface SyncError {
val isRetryable: Boolean
data object Cancelled : SyncError {
override val isRetryable: Boolean = false
}
data object NetworkUnavailable : SyncError {
override val isRetryable: Boolean = true
}
data object AuthRequired : SyncError {
override val isRetryable: Boolean = false
}
data object PermissionDenied : SyncError {
override val isRetryable: Boolean = false
}
/**
* The local app build is older than `appConfig/mobile.minSupportedAppVersionCode`.
* UI must direct the user to the store; sync stays disabled until the
* app is upgraded. See block.md.
*/
data class UnsupportedAppVersion(val message: String) : SyncError {
override val isRetryable: Boolean = false
}
data class StorageError(val cause: Throwable) : SyncError {
override val isRetryable: Boolean = false
}
data class Unknown(val cause: Throwable) : SyncError {
override val isRetryable: Boolean = true
}
}
typealias SyncResult<T> = Either<SyncError, T>