diff --git a/event-logger/src/main/kotlin/events.kt b/event-logger/src/main/kotlin/events.kt index 9fbbae9c8..8a68eef17 100644 --- a/event-logger/src/main/kotlin/events.kt +++ b/event-logger/src/main/kotlin/events.kt @@ -7,6 +7,18 @@ package org.signal.event import java.util.Collections import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import kotlinx.serialization.modules.SerializersModule +import kotlinx.serialization.modules.polymorphic +import kotlinx.serialization.modules.subclass + +val module = SerializersModule { + polymorphic(Event::class) { + subclass(RemoteConfigSetEvent::class) + subclass(RemoteConfigDeleteEvent::class) + } +} +val jsonFormat = Json { serializersModule = module } sealed interface Event diff --git a/event-logger/src/main/kotlin/loggers.kt b/event-logger/src/main/kotlin/loggers.kt index 9ff57f0e7..4ce29db55 100644 --- a/event-logger/src/main/kotlin/loggers.kt +++ b/event-logger/src/main/kotlin/loggers.kt @@ -12,7 +12,6 @@ import com.google.cloud.logging.Severity import com.google.protobuf.Struct import com.google.protobuf.util.JsonFormat import kotlinx.serialization.encodeToString -import kotlinx.serialization.json.Json interface AdminEventLogger { fun logEvent(event: Event, labels: Map?) @@ -26,7 +25,7 @@ class NoOpAdminEventLogger : AdminEventLogger { class GoogleCloudAdminEventLogger(private val logging: Logging, private val logName: String) : AdminEventLogger { override fun logEvent(event: Event, labels: Map?) { val structBuilder = Struct.newBuilder() - JsonFormat.parser().merge(Json.encodeToString(event), structBuilder) + JsonFormat.parser().merge(jsonFormat.encodeToString(event), structBuilder) val struct = structBuilder.build() val logEntryBuilder = LogEntry.newBuilder(JsonPayload.of(struct))