diff --git a/arrow-libs/core/arrow-core-retrofit/api/arrow-core-retrofit.api b/arrow-libs/core/arrow-core-retrofit/api/arrow-core-retrofit.api index 68d1c30724d..103b0c02921 100644 --- a/arrow-libs/core/arrow-core-retrofit/api/arrow-core-retrofit.api +++ b/arrow-libs/core/arrow-core-retrofit/api/arrow-core-retrofit.api @@ -29,14 +29,16 @@ public abstract class arrow/retrofit/adapter/either/networkhandling/CallError { } public final class arrow/retrofit/adapter/either/networkhandling/HttpError : arrow/retrofit/adapter/either/networkhandling/CallError { - public fun (ILjava/lang/String;)V + public fun (ILjava/lang/String;Ljava/lang/String;)V public final fun component1 ()I public final fun component2 ()Ljava/lang/String; - public final fun copy (ILjava/lang/String;)Larrow/retrofit/adapter/either/networkhandling/HttpError; - public static synthetic fun copy$default (Larrow/retrofit/adapter/either/networkhandling/HttpError;ILjava/lang/String;ILjava/lang/Object;)Larrow/retrofit/adapter/either/networkhandling/HttpError; + public final fun component3 ()Ljava/lang/String; + public final fun copy (ILjava/lang/String;Ljava/lang/String;)Larrow/retrofit/adapter/either/networkhandling/HttpError; + public static synthetic fun copy$default (Larrow/retrofit/adapter/either/networkhandling/HttpError;ILjava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Larrow/retrofit/adapter/either/networkhandling/HttpError; public fun equals (Ljava/lang/Object;)Z public final fun getBody ()Ljava/lang/String; public final fun getCode ()I + public final fun getMessage ()Ljava/lang/String; public fun hashCode ()I public fun toString ()Ljava/lang/String; } diff --git a/arrow-libs/core/arrow-core-retrofit/src/main/kotlin/arrow/retrofit/adapter/either/networkhandling/CallError.kt b/arrow-libs/core/arrow-core-retrofit/src/main/kotlin/arrow/retrofit/adapter/either/networkhandling/CallError.kt index 1cd6106f9d1..f91e08e010a 100644 --- a/arrow-libs/core/arrow-core-retrofit/src/main/kotlin/arrow/retrofit/adapter/either/networkhandling/CallError.kt +++ b/arrow-libs/core/arrow-core-retrofit/src/main/kotlin/arrow/retrofit/adapter/either/networkhandling/CallError.kt @@ -10,7 +10,11 @@ public sealed class CallError /** * Http request returned an error response. */ -public data class HttpError(val code: Int, val body: String) : CallError() +public data class HttpError( + val code: Int, + val message: String, + val body: String +) : CallError() /** * IO error: no network, socket timeout etc. Check the [cause] for details. diff --git a/arrow-libs/core/arrow-core-retrofit/src/main/kotlin/arrow/retrofit/adapter/either/networkhandling/NetworkEitherCallAdapter.kt b/arrow-libs/core/arrow-core-retrofit/src/main/kotlin/arrow/retrofit/adapter/either/networkhandling/NetworkEitherCallAdapter.kt index 021219800be..f1272a8ba91 100644 --- a/arrow-libs/core/arrow-core-retrofit/src/main/kotlin/arrow/retrofit/adapter/either/networkhandling/NetworkEitherCallAdapter.kt +++ b/arrow-libs/core/arrow-core-retrofit/src/main/kotlin/arrow/retrofit/adapter/either/networkhandling/NetworkEitherCallAdapter.kt @@ -36,8 +36,12 @@ private class EitherCall( private fun Response.toEither(): Either { // Http error response (4xx - 5xx) if (!isSuccessful) { - val errorBody = errorBody()?.string() ?: "" - return HttpError(code(), errorBody).left() + val errorBody = errorBody()!!.string() + return HttpError( + code = code(), + message = message(), + body = errorBody + ).left() } // Http success response with body diff --git a/arrow-libs/core/arrow-core-retrofit/src/test/kotlin/arrow/retrofit/adapter/either/networkhandling/NetworkEitherCallAdapterTest.kt b/arrow-libs/core/arrow-core-retrofit/src/test/kotlin/arrow/retrofit/adapter/either/networkhandling/NetworkEitherCallAdapterTest.kt index b4dd5dd1e9f..f7705dfa5a1 100644 --- a/arrow-libs/core/arrow-core-retrofit/src/test/kotlin/arrow/retrofit/adapter/either/networkhandling/NetworkEitherCallAdapterTest.kt +++ b/arrow-libs/core/arrow-core-retrofit/src/test/kotlin/arrow/retrofit/adapter/either/networkhandling/NetworkEitherCallAdapterTest.kt @@ -61,7 +61,11 @@ private fun networkEitherCallAdapterTests( val body = service!!.getEither() - body shouldBe HttpError(code = 400, body = """{"errorCode":666}""").left() + body shouldBe HttpError( + code = 400, + message = "Client Error", + body = """{"errorCode":666}""" + ).left() } "should return CallError for 200 with invalid JSON" { @@ -78,7 +82,11 @@ private fun networkEitherCallAdapterTests( val body = service!!.getEither() - body shouldBe HttpError(code = 400, body = """not a valid JSON""").left() + body shouldBe HttpError( + code = 400, + message = "Client Error", + body = """not a valid JSON""" + ).left() } "should return IOError when server disconnects" {