trevjones
08/01/2023, 7:51 PM@JsonClass(generateAdapter = true, generator = "hand-written")
sealed class ClientMessage {
val type: String
get() = this.javaClass.name
companion object Unknown : ClientMessage()
}
@JsonClass(generateAdapter = true)
data class Launch(
val request: JobRequest
) : ClientMessage()
@Keep
class ClientMessageJsonAdapter(private val moshi: Moshi) : JsonAdapter<ClientMessage>() {
@Suppress("UNCHECKED_CAST")
private val actual by lazy {
PolymorphicJsonAdapterFactory.of(
ClientMessage::class.java,
"type",
)
.withSubtype(Launch::class.java, Launch::class.java.name)
.withDefaultValue(ClientMessage.Unknown)
.create(ClientMessage::class.java, emptySet(), moshi) as JsonAdapter<ClientMessage>
}
override fun fromJson(reader: JsonReader): ClientMessage? {
return actual.fromJson(reader)
}
override fun toJson(writer: JsonWriter, value: ClientMessage?) {
actual.toJson(writer, value)
}
}