pajatopmr
11/13/2020, 1:55 PMVampire
11/13/2020, 2:01 PMpajatopmr
11/13/2020, 2:35 PMVampire
11/13/2020, 2:36 PMpajatopmr
11/13/2020, 2:38 PMpajatopmr
12/04/2020, 7:02 PMobject ServerInfoSerializer : JsonContentPolymorphicSerializer<ServerInfo>(ServerInfo::class) {
override fun selectDeserializer(element: JsonElement) = ServerInfoImpl.serializer()
}
interface ServerInfo {
val name: String
val version: String?
}
@Serializable
class ServerInfoImpl(override val name: String, override val version: String?) : ServerInfo
But how to handle a hierarchy is eluding me at the moment. Something simple like:
object InitializeResultSerializer : JsonContentPolymorphicSerializer<InitializeResult>(InitializeResult::class) {
override fun selectDeserializer(element: JsonElement) = when {
//"serverInfo" in element.jsonObject -> ServerInfoImpl.serializer()
else -> InitializeResultImpl.serializer()
}
}
interface InitializeResult {
val serverInfo: ServerInfo?
}
@Serializable
class InitializeResultImpl(
override val serverInfo: ServerInfo?
) : InitializeResult
which, when I try to use
val result: InitializeResult = InitializeResultImpl(serverInfo)
assertEquals(jsonResult, Json.encodeToString(InitializeResultSerializer, result))
I get a failure and a message that serverInfoImpl
is not serializable in the scope of serverInfo
which I see clearly. What I don't see is how to satisfy this requirement. Suggestions?