Nikky
10/12/2019, 5:19 PMNikky
10/12/2019, 5:20 PM@Polymorphic
@Serializable(PolymorphicSerializer::class)
sealed class LoginResponse {
interface Failure
@Serializable
data class Success(
val message: String
) : LoginResponse()
@Serializable
object IncorrectPassword: Failure, LoginResponse()
companion object {
fun install(builder: SerializersModuleBuilder) {
builder.polymorphic<LoginResponse> {
Success::class with Success.serializer()
IncorrectPassword::class with IncorrectPassword.serializer()
}
}
}
}
Dominaezzz
10/12/2019, 5:33 PMNikky
10/12/2019, 6:31 PM@Serializable annotation is ignored because it is impossible to serialize automatically interfaces or enums. Provide serializer manually via e.g. companion object
Nikky
10/12/2019, 6:36 PM@Serializer(forClass = IncorrectPassword::class)
object IncorrectPassword: LoginResponse(), Failure {
override val descriptor: SerialDescriptor = SerialClassDescImpl("IncorrectPassword")
override fun deserialize(decoder: Decoder): IncorrectPassword {
return IncorrectPassword
}
override fun serialize(encoder: Encoder, obj: IncorrectPassword) {
val composite = encoder.beginStructure(descriptor)
composite.endStructure(descriptor)
}
}
Nikky
10/12/2019, 6:44 PMFudge
10/12/2019, 8:27 PMobj::class.simpleName!!
Fudge
10/12/2019, 8:27 PM