diff --git a/src/main/kotlin/ru/kotlin/homework/network/NetworkLogger.kt b/src/main/kotlin/ru/kotlin/homework/network/NetworkLogger.kt index a5f33c5..f5a98b1 100644 --- a/src/main/kotlin/ru/kotlin/homework/network/NetworkLogger.kt +++ b/src/main/kotlin/ru/kotlin/homework/network/NetworkLogger.kt @@ -10,24 +10,36 @@ import java.time.LocalDateTime * Известный вам список ошибок */ sealed class ApiException(message: String) : Throwable(message) { - data object NotAuthorized : ApiException("Not authorized") - data object NetworkException : ApiException("Not connected") - data object UnknownException: ApiException("Unknown exception") + data object NotAuthorized : ApiException("Not authorized") { + private fun readResolve(): Any = NotAuthorized + } + + data object NetworkException : ApiException("Not connected") { + private fun readResolve(): Any = NetworkException + } + + data object UnknownException : ApiException("Unknown exception") { + private fun readResolve(): Any = UnknownException + } } class ErrorLogger { - val errors = mutableListOf>() + private val errors = mutableListOf>() - fun log(response: NetworkResponse<*, E>) { + fun log(response: NetworkResponse<*, *>) { if (response is Failure) { errors.add(response.responseDateTime to response.error) } } + fun dump(): List> { + return errors + } + fun dumpLog() { errors.forEach { (date, error) -> - println("Error at $date: ${error.message}") + println("Error at $date: $error") } } } @@ -38,17 +50,15 @@ fun processThrowables(logger: ErrorLogger) { logger.log(Success(Circle)) Thread.sleep(100) logger.log(Failure(IllegalArgumentException("Something unexpected"))) - logger.dumpLog() } -fun processApiErrors(apiExceptionLogger: ErrorLogger) { +fun processApiErrors(apiExceptionLogger: ErrorLogger<*>) { apiExceptionLogger.log(Success("Success")) Thread.sleep(100) apiExceptionLogger.log(Success(Circle)) Thread.sleep(100) apiExceptionLogger.log(Failure(ApiException.NetworkException)) - apiExceptionLogger.dumpLog() } @@ -60,5 +70,10 @@ fun main() { println("Processing Api:") processApiErrors(logger) + + val errors = logger.dump() + errors.forEach { + println("List Errors = $it") + } } diff --git a/src/main/kotlin/ru/kotlin/homework/network/NetworkResponse.kt b/src/main/kotlin/ru/kotlin/homework/network/NetworkResponse.kt index 3018c40..a5e3199 100644 --- a/src/main/kotlin/ru/kotlin/homework/network/NetworkResponse.kt +++ b/src/main/kotlin/ru/kotlin/homework/network/NetworkResponse.kt @@ -2,7 +2,6 @@ package ru.kotlin.homework.network -import java.lang.Exception import java.lang.IllegalArgumentException import java.time.LocalDateTime @@ -16,30 +15,31 @@ sealed class NetworkResponse { /** * Network success */ -data class Success(val resp: T): NetworkResponse() +data class Success(val resp: T) : NetworkResponse() /** * Network error */ -data class Failure(val error: R): NetworkResponse() +data class Failure(val error: R) : NetworkResponse() val s1 = Success("Message") -val r11: NetworkResponse = s1 -val r12: NetworkResponse = s1 + +val r11: Success = s1 +val r12: Success = s1 val s2 = Success("Message") -val r21: NetworkResponse = s2 -val r22: NetworkResponse = s2 +val r21: Success = s2 +val r22: Success = s2 val s3 = Success(String()) -val r31: Success = s3 -val r32: Success = s3 +val r31: Success = s3 +val r32: Success = s3 val e = Failure(Error()) -val er1: NetworkResponse = e -val er2: NetworkResponse = e -val er4: NetworkResponse = e +val er1: Failure = e +val er2: Failure = e +val er4: Failure = e -val er5: NetworkResponse = Failure(IllegalArgumentException("message")) +val er5: Failure = Failure(IllegalArgumentException("message")) val message = e.error.message \ No newline at end of file