Skip to content

Instantly share code, notes, and snippets.

@monday8am
Last active June 21, 2022 12:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save monday8am/8ee3ed6b46091c56ff0925ee77c46a99 to your computer and use it in GitHub Desktop.
Save monday8am/8ee3ed6b46091c56ff0925ee77c46a99 to your computer and use it in GitHub Desktop.
RepoResult
/* Different solutions for future RepoResult (?) object! */
/*
* James!
*/
sealed interface ResultReason
sealed class Result<S, E: ResultReason>
data class ResultSuccess<S, E: ResultReason>(val data: S) : Result<S, E>()
data class ResultError<S, E: ResultReason>(val reason: E) : Result<S, E>()
sealed class NetworkSourceReason : ResultReason
object NoConnection: NetworkSourceReason()
data class HttpErrorCode(val code: Int): NetworkSourceReason()
data class JsonParsing(val exception: JsonParseException): NetworkSourceReason()
sealed class LocalSourceReason : ResultReason
object SDCardRemoved: LocalSourceReason()
sealed class DbReason: LocalSourceReason()
data class Realm(val exception: io.realm.exceptions.RealmError): DbReason()
data class SQL(val exception: SQLException): DbReason()
/*
* Anton!
*/
sealed class RepoResult<out T> {
data class Success<out T>(val data: T) : RepoResult<T>()
data class NetworkError(val reason: NetworkErrorReason, val originalException: Exception?): RepoResult()
data class AuthError(val reason: AuthReason, val originalException: Exception?): RepoResult()
data class LocalSourceError(val reason: LocalSourceReason, val originalException: Exception?): RepoResult()
// Different errors according to repositories
}
enum class NetworkErrorReason {
NoConnection,
ServerError,
Unknown
}
enum class LocalSourceReason {
SDCardRemoved,
PrivateTour,
TourAlreadyDeleted,
Unknown
}
enum class AuthReason {
FacebookSDK,
WrongPassword,
WrongHeaders,
Unknown
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment