From 970a1573ed67b07bcd95901f6db3fae163cf1a9a Mon Sep 17 00:00:00 2001 From: GIDROPES Date: Fri, 15 Nov 2024 09:36:20 +0300 Subject: [PATCH 1/3] Task 1 complete --- .../kotlin/ru/kotlin/homework/network/NetworkResponse.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/ru/kotlin/homework/network/NetworkResponse.kt b/src/main/kotlin/ru/kotlin/homework/network/NetworkResponse.kt index 3018c40..49094c9 100644 --- a/src/main/kotlin/ru/kotlin/homework/network/NetworkResponse.kt +++ b/src/main/kotlin/ru/kotlin/homework/network/NetworkResponse.kt @@ -9,19 +9,19 @@ import java.time.LocalDateTime /** * Network result */ -sealed class NetworkResponse { +sealed class NetworkResponse { val responseDateTime: LocalDateTime = LocalDateTime.now() } /** * 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< Nothing,R>() val s1 = Success("Message") val r11: NetworkResponse = s1 From d098cb524ad7b30c87fa4f458b03a38e2dc42e38 Mon Sep 17 00:00:00 2001 From: GIDROPES Date: Fri, 15 Nov 2024 11:48:19 +0300 Subject: [PATCH 2/3] Task 2 complete maybe --- .../kotlin/homework/network/NetworkLogger.kt | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/ru/kotlin/homework/network/NetworkLogger.kt b/src/main/kotlin/ru/kotlin/homework/network/NetworkLogger.kt index a5f33c5..641c3f7 100644 --- a/src/main/kotlin/ru/kotlin/homework/network/NetworkLogger.kt +++ b/src/main/kotlin/ru/kotlin/homework/network/NetworkLogger.kt @@ -10,14 +10,22 @@ 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 { +class ErrorLogger { - val errors = mutableListOf>() + private val errors = mutableListOf>() fun log(response: NetworkResponse<*, E>) { if (response is Failure) { @@ -30,6 +38,10 @@ class ErrorLogger { println("Error at $date: ${error.message}") } } + + //fun dump(): List> = errors.toList() + + } fun processThrowables(logger: ErrorLogger) { From 0bbd7cd67bc167cfdfbfc667fe99e301c74071ad Mon Sep 17 00:00:00 2001 From: GIDROPES Date: Tue, 19 Nov 2024 16:19:16 +0300 Subject: [PATCH 3/3] Task 2 + task 3 complete --- .../kotlin/homework/network/NetworkLogger.kt | 21 +++++++++++++------ .../homework/network/NetworkResponse.kt | 2 +- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/ru/kotlin/homework/network/NetworkLogger.kt b/src/main/kotlin/ru/kotlin/homework/network/NetworkLogger.kt index 641c3f7..d86eacf 100644 --- a/src/main/kotlin/ru/kotlin/homework/network/NetworkLogger.kt +++ b/src/main/kotlin/ru/kotlin/homework/network/NetworkLogger.kt @@ -2,6 +2,7 @@ package ru.kotlin.homework.network +import ru.kotlin.LoginException import ru.kotlin.homework.Circle import java.lang.IllegalArgumentException import java.time.LocalDateTime @@ -23,28 +24,36 @@ sealed class ApiException(message: String) : Throwable(message) { } } -class ErrorLogger { +interface Logger { + fun log(response: NetworkResponse<*, E>) + fun dumpLog() +} +interface Dumper { + fun dump(): List> +} + +class ErrorLogger : Logger, Dumper { private val errors = mutableListOf>() - fun log(response: NetworkResponse<*, E>) { + override fun log(response: NetworkResponse<*, E>) { if (response is Failure) { errors.add(response.responseDateTime to response.error) } } - fun dumpLog() { + override fun dumpLog() { errors.forEach { (date, error) -> println("Error at $date: ${error.message}") } } - //fun dump(): List> = errors.toList() + override fun dump(): List> = errors } -fun processThrowables(logger: ErrorLogger) { +fun processThrowables(logger: Logger) { logger.log(Success("Success")) Thread.sleep(100) logger.log(Success(Circle)) @@ -54,7 +63,7 @@ fun processThrowables(logger: ErrorLogger) { logger.dumpLog() } -fun processApiErrors(apiExceptionLogger: ErrorLogger) { +fun processApiErrors(apiExceptionLogger: Logger) { apiExceptionLogger.log(Success("Success")) Thread.sleep(100) apiExceptionLogger.log(Success(Circle)) diff --git a/src/main/kotlin/ru/kotlin/homework/network/NetworkResponse.kt b/src/main/kotlin/ru/kotlin/homework/network/NetworkResponse.kt index 49094c9..13d6aae 100644 --- a/src/main/kotlin/ru/kotlin/homework/network/NetworkResponse.kt +++ b/src/main/kotlin/ru/kotlin/homework/network/NetworkResponse.kt @@ -21,7 +21,7 @@ data class Success(val resp: T): NetworkResponse() /** * Network error */ -data class Failure(val error: R): NetworkResponse< Nothing,R>() +data class Failure(val error: R): NetworkResponse< Nothing,R>() val s1 = Success("Message") val r11: NetworkResponse = s1