jkbbwr
12/28/2017, 12:29 PM@Serializable
sealed class Proto {
@Serializable
data class Hello(val greeting: String) : Proto()
@Serializable
data class Bye(val name: String) : Proto()
}
object ProtoSerializer : KSerializer<Proto> {
override val serialClassDesc: KSerialClassDesc = SerialClassDescImpl(Proto::class.qualifiedName!!)
override fun load(input: KInput): Proto {
val type = input.readStringValue()
println(type)
return input.read()
}
override fun save(output: KOutput, obj: Proto) {
output.writeStringValue(obj::class.simpleName!!)
when(obj) {
is Proto.Hello -> {
output.write(obj)
}
is Proto.Bye -> {
output.write(obj)
}
}
}
}
fun main(args: Array<String>) {
val json = jsonWithContext()
val payload = json.stringify(Proto.Hello("hi!") as Proto)
println(payload)
val data = json.parse<Proto>(payload)
println(data)
}