Wishnuprathikantam
02/22/2021, 10:28 AM@Serializable
data class SuccessResponse<T>(
val status: Int,
val data: T,
val message: String
) : ApiResponse()
@Serializable
data class ErrorResponse(
val status: Int,
val errorCode: Int,
val message: String
) : ApiResponse()
@Serializable
sealed class ApiResponse
remoteCall(
ApiRoutes.LOGIN,
Json.encodeToString(AdminRequest.serializer(), body),
ApiResponse.serializer(),
<http://HttpMethod.POST|HttpMethod.POST>
)
when (this) {
is SuccessResponse<*> -> {
val data = this.unsafeCast<SuccessResponse<T>>()
success(data)
}
is ErrorResponse -> {
failure(this)
}
else -> {
console.log(this)
}
}
Need help with deserializing sealed classes, without else block throws NoWhenBranchMatchedExceptionArslan Armanuly
02/22/2021, 10:36 AMthis
have?Wishnuprathikantam
02/22/2021, 10:37 AMRobert Jaros
02/22/2021, 10:42 AMWishnuprathikantam
02/22/2021, 10:45 AMArslan Armanuly
02/22/2021, 10:46 AMWishnuprathikantam
02/22/2021, 10:51 AMRobert Jaros
02/22/2021, 10:51 AMRobert Jaros
02/22/2021, 10:52 AMRobert Jaros
02/22/2021, 10:52 AMWishnuprathikantam
02/22/2021, 10:55 AM{
"status": 200,
"data": {
"hash": "<http://MTIzNDU2Nzg5.MQ|MTIzNDU2Nzg5.MQ>==..",
"key": "eyJhbGciOiJIUzUxMiJ9.."
},
"message": "",
"httpStatusCode": 200
}
Wishnuprathikantam
02/22/2021, 10:56 AMArslan Armanuly
02/22/2021, 10:56 AMArslan Armanuly
02/22/2021, 10:57 AMArslan Armanuly
02/22/2021, 10:57 AMWishnuprathikantam
02/22/2021, 10:57 AMRobert Jaros
02/22/2021, 11:00 AMRobert Jaros
02/22/2021, 11:00 AMRobert Jaros
02/22/2021, 11:01 AMArslan Armanuly
02/22/2021, 11:01 AMArslan Armanuly
02/22/2021, 11:01 AMWishnuprathikantam
02/22/2021, 11:03 AMWishnuprathikantam
02/22/2021, 11:03 AMArslan Armanuly
02/22/2021, 11:05 AMdata
as String and deserialize it after the when
Wishnuprathikantam
02/22/2021, 11:09 AMWishnuprathikantam
02/22/2021, 11:32 AMprivate val module = SerializersModule {
polymorphic(ApiResponse::class) {
subclass(SuccessResponse::class)
subclass(ErrorResponse::class)
}
}
private val client = RestClient(module)
Wishnuprathikantam
02/22/2021, 11:34 AMRobert Jaros
02/22/2021, 11:36 AMWishnuprathikantam
02/22/2021, 11:37 AMRobert Jaros
02/22/2021, 11:40 AMRobert Jaros
02/22/2021, 11:40 AM@Serializable
data class SuccessResponse<T>(
val status: Int,
val data: T,
val message: String
) : ApiResponse<T>()
@Serializable
data class ErrorResponse<T>(
val status: Int,
val errorCode: Int,
val message: String
) : ApiResponse<T>()
@Serializable
sealed class ApiResponse<T>
@Serializable
data class Data(val hash: String, val key: String)
Robert Jaros
02/22/2021, 11:41 AMT
to the ApiResponse
Robert Jaros
02/22/2021, 11:41 AMval responseModule = SerializersModule {
polymorphic(ApiResponse::class) {
subclass(SuccessResponse.serializer(PolymorphicSerializer(Any::class)))
}
polymorphic(Any::class) {
subclass(Data::class)
}
}
Robert Jaros
02/22/2021, 11:42 AMval source = SuccessResponse(5, Data("h", "k"), "message")
val json = Json {
serializersModule = responseModule
}.encodeToString(
ApiResponse.serializer(Data.serializer()),
source
)
console.log(json)
val x = Json { serializersModule = responseModule }.decodeFromString(
ApiResponse.serializer(Data.serializer()),
json
)
console.log(x)
Robert Jaros
02/22/2021, 11:45 AM{
"type": "com.example.SuccessResponse",
"status": 5,
"data": {
"type": "com.example.Data",
"hash": "h",
"key": "k"
},
"message": "message"
}
Robert Jaros
02/22/2021, 11:45 AMT
you useWishnuprathikantam
02/22/2021, 12:27 PM