Register polymorphic serialization

This commit is contained in:
Ehren Kret 2022-09-07 18:09:46 -05:00
parent 7d171a79d7
commit 53387f5a0c
2 changed files with 13 additions and 2 deletions

View File

@ -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

View File

@ -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<String, String>?)
@ -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<String, String>?) {
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))