Antanas A.
05/31/2019, 7:08 AM// * We need to register serializers for this RequestForChangeEvent to allow proper serialization for this type
companion object {
init {
registerSerializer(RequestForChangeEvent::class.java.name, RequestForChangeEvent.serializer(PolymorphicSerializer))
registerSerializer(ChangeRejectedEvent::class.java.name, ChangeRejectedEvent.serializer(PolymorphicSerializer))
registerSerializer(ChangeAcceptedEvent::class.java.name, ChangeAcceptedEvent.serializer(PolymorphicSerializer))
}
}
how can I fix this?sandwwraith
05/31/2019, 9:14 AMPaul Woitaschek
05/31/2019, 9:17 AMsandwwraith
05/31/2019, 9:19 AMregisterSerializer
was registering classes in a global map. Global variables (especially mutable) are a very error-prone practice and hard to use in Kotlin/Native memory modelsandwwraith
05/31/2019, 9:20 AMJson
instance with registered modules around your program where you wantPaul Woitaschek
05/31/2019, 11:28 AM@UseSerializer(xx))
and it always uses that polymorphic serializer?Antanas A.
05/31/2019, 11:45 AM@Serializable
data class RequestForChangeEvent<out T : EditableEvent>(
val data: T
)
And I want to get a this class serializer with type T serializers of PolymorphicAntanas A.
05/31/2019, 11:45 AMval serializer = RequestForChangeEvent.serializer(PolymorphicSerializer)
Antanas A.
05/31/2019, 11:46 AMAntanas A.
05/31/2019, 11:46 AMAntanas A.
05/31/2019, 11:47 AMAntanas A.
05/31/2019, 12:00 PMAntanas A.
05/31/2019, 12:00 PMPaul Woitaschek
05/31/2019, 12:03 PMPaul Woitaschek
05/31/2019, 12:04 PMsandwwraith
05/31/2019, 1:15 PMdata
with @Polymorphic
or create RequestForChangeEvent.serializer(PolymorphicSerializer(EditableEvent::class))
sandwwraith
05/31/2019, 1:16 PMEditableEvent
in some module, and construct your format instance with this moduleAntanas A.
05/31/2019, 1:19 PMAntanas A.
05/31/2019, 1:19 PM@Serializable
data class ChangeRejectedEvent<out T : EditableEvent>(
val guid: GUID,
val ref: GUID, // reference to RequestForChangeEvent
val eventAt: Timestamp,
val rejectedBy: RejectedBy,
@Polymorphic val data: T
)
Antanas A.
05/31/2019, 1:19 PMAntanas A.
05/31/2019, 1:19 PM@Serializable
data class ChangeRejectedEvent(
val guid: GUID,
val ref: GUID, // reference to RequestForChangeEvent
val eventAt: Timestamp,
val rejectedBy: RejectedBy,
@Polymorphic val data: EditableEvent // <- here
)
sandwwraith
05/31/2019, 1:20 PMT
type param, you still need to construct it from PolymorphicSerializer(EditableEvent::class)
sandwwraith
05/31/2019, 1:20 PMT
, @Polymorphic
will do what you wantAntanas A.
05/31/2019, 1:20 PMAntanas A.
05/31/2019, 1:21 PMsandwwraith
05/31/2019, 1:21 PMAntanas A.
05/31/2019, 1:21 PMAntanas A.
05/31/2019, 1:22 PMAntanas A.
05/31/2019, 1:22 PMAntanas A.
05/31/2019, 1:23 PMAntanas A.
05/31/2019, 1:23 PMsandwwraith
05/31/2019, 1:23 PMabstract
classessandwwraith
05/31/2019, 1:24 PM@Polymorphic val data: ABCD
produces PolymorphicSerializer(ABCD::class)
Antanas A.
05/31/2019, 1:25 PMAntanas A.
05/31/2019, 1:25 PM