All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.dk.cachet.carp.common.infrastructure.serialization.UnknownTriggerSerializers.kt Maven / Gradle / Ivy

package dk.cachet.carp.common.infrastructure.serialization

import dk.cachet.carp.common.application.data.NoData
import dk.cachet.carp.common.application.triggers.Trigger
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json


/**
 * A wrapper used to load extending types from [Trigger] serialized as JSON which are unknown at runtime.
 */
@Serializable( TriggerSerializer::class )
data class CustomTrigger( override val className: String, override val jsonSource: String, val serializer: Json ) :
    Trigger(), UnknownPolymorphicWrapper
{
    @Serializable
    private data class BaseMembers( override val sourceDeviceRoleName: String ) : Trigger()

    override val sourceDeviceRoleName: String

    init
    {
        val json = Json( serializer ) { ignoreUnknownKeys = true }
        val baseMembers = json.decodeFromString( BaseMembers.serializer(), jsonSource )
        sourceDeviceRoleName = baseMembers.sourceDeviceRoleName
    }
}

/**
 * Custom serializer for a [Trigger] which enables deserializing types that are unknown at runtime, yet extend from [Trigger].
 */
object TriggerSerializer : KSerializer>
    by createUnknownPolymorphicSerializer( { className, json, serializer -> CustomTrigger( className, json, serializer ) } )




© 2015 - 2025 Weber Informatics LLC | Privacy Policy