Davide Giuseppe Farella
12/04/2019, 8:26 AMDraftSource.build(actionId = 0, messageId = "id")
or also as DraftSource
is failing with Can't locate argument-less serializer for class
sandwwraith
12/09/2019, 8:55 AMPolymorphicSerializer(DraftSource::class)
. Or try new library version with buillt-in support for sealed classes: https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/polymorphism.md#sealed-classes (requires kotlin 1.3.60)Davide Giuseppe Farella
12/09/2019, 9:00 AMDraftSource::class.serizalizer()
😄
Oh, good to know that sealed class are “automatically” supported now.
Some improvements has been applied?
I had to refactor in the following way for get it working:
sealed class DraftSource {
...
open val messageId = generateDraftId()
👇
sealed class DraftSource {
abstract val messageId: String
@Serializable
@Suppress("DataClassPrivateConstructor") // Still accessible by `copy` function
data class Plain private constructor(
override val actionId: Int,
override val messageId: String
): DraftSource() {
constructor(actionId: Int) :
this(actionId, generateDraftId())
}
Davide Giuseppe Farella
12/09/2019, 9:02 AMmessageId
would generate a new id by generateDraftId()
every time an object is deserialized