I am using suspend functions in my repository, every function has try catch block and the code is duplicates.
For example:
class ApiRepository(private val api: Api) {
suspend fun listAllProducts(): Response<List<Product>> {
return try {
val response = api.listAllProducts()
Response.Success(Mapper.toProductList(response))
} catch (e: Exception) {
e.printStackTrace()
Response.Error(e)
}
}
suspend fun listAllProductCategories(): Response<List<Category>> {
return try {
val response = api.listAllProductCategories()
Response.Success(Mapper.toCategoryList(response))
} catch (e: Exception) {
e.printStackTrace()
Response.Error(e)
}
}
}
Response class
sealed class Response<T> {
data class Success<T>(val value: T) : Response<T>()
data class Error<T>(val t: Throwable) : Response<T>()
}
Is there more generic way to do it?