Dominaezzz
07/29/2019, 11:46 PMclassDiscriminator
per parent class planned?sandwwraith
07/30/2019, 8:21 AMDominaezzz
07/30/2019, 9:08 AMclassDiscriminator
for the Json
object. So all polymorphic sealed classes have to use the same one.
The rest API I'm consuming (with ktor) returns different "classDiscriminators". In some cases it's "errcode", sometimes it's "type" or even a composite "subtype".
I'll provide more concrete examples.Dominaezzz
07/30/2019, 9:08 AMsealed class MatrixError : Throwable() {
abstract val errcode: String
}
@Serializable
@SerialName("M_NOT_FOUND")
data class NotFound(override val error: String) : MatrixError() {
override val errcode get() = "M_NOT_FOUND"
}
@Serializable
@SerialName("M_UNKNOWN")
data class Unkown(override val error: String) : MatrixError() {
override val errcode get() = "M_UNKNOWN"
}
@Serializable
@SerialName("M_LIMIT_EXCEEDED")
data class LimitExceeded(
override val error: String,
@SerialName("retry_after_ms")
val retryAfterMillis: Long
) : MatrixError() {
override val errcode get() = "M_LIMIT_EXCEEDED"
}
In this case the classDiscriminator
is errcode
when deserializing. (I also want access to the classDiscriminator
after deserialising but that's a differeny problem).Dominaezzz
07/30/2019, 9:16 AMsealed class Event
@SerialName("m.room")
data class RoomEvent : Event
@SerialName("m.join")
data class JoinEvent(val userId: String) : Event
In this case the classDiscriminator
is type
. (I don't need access here.)Dominaezzz
07/30/2019, 9:18 AMJson
object to parse the sealed classes and as a consequence, two `HttpClient`s and in some cases I just can't, since the same request could return either sealed class type.Dominaezzz
07/30/2019, 9:22 AMsealed class Event
@SerialName("m.room")
sealed class RoomEvent : Event
@SerialName("exit")
data class RoomExitEvent: RoomEvent
@SerialName("m.join")
data class JoinEvent(val userId: String) : Event
Bad names but you get the idea. Each subclass that is a parent, would get their own classDiscriminator
.Dominaezzz
07/30/2019, 10:22 AM