@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY) @JsonSubTypes( JsonSubTypes.Type(value = PowerUpMessage::class, name = "POWER_UP"), JsonSubTypes.Type(value = PowerDownMessage::class, name = "POWER_DOWN"), JsonSubTypes.Type(value = Phase1PushInterval2Message::class, name = "PHASE_1"), JsonSubTypes.Type(value = Phase3PushInterval2Message::class, name = "PHASE_3"), ) sealed class SmartMeterMessage(open val DeviceId: String, open val Datetime: Instant) sealed class PowerMessage(override val DeviceId: String, open val DateTime: Instant) : SmartMeterMessage(DeviceId, DateTime) data class PowerDownMessage(override val DeviceId: String, override val DateTime: Instant) : PowerMessage(DeviceId, DateTime)