tweaking the kxs serde stuff
This commit is contained in:
parent
960782dc90
commit
28f985bdca
3 changed files with 52 additions and 54 deletions
|
|
@ -0,0 +1,50 @@
|
|||
package dev.adamko.kafkatorio.processor.serdes
|
||||
|
||||
import kotlinx.serialization.BinaryFormat
|
||||
import kotlinx.serialization.decodeFromByteArray
|
||||
import kotlinx.serialization.encodeToByteArray
|
||||
import org.apache.kafka.common.serialization.Deserializer
|
||||
import org.apache.kafka.common.serialization.Serde
|
||||
import org.apache.kafka.common.serialization.Serializer
|
||||
|
||||
|
||||
inline fun <reified T> BinaryFormat.kafkaSerializer() =
|
||||
Serializer { topic: String, data: T ->
|
||||
runCatching {
|
||||
encodeToByteArray(data)
|
||||
}.getOrElse { e ->
|
||||
println(
|
||||
"""
|
||||
Exception on encodeToString
|
||||
Topic: $topic
|
||||
topicData: $data
|
||||
topicData as T: $data
|
||||
""".trimIndent()
|
||||
)
|
||||
e.printStackTrace()
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <reified T> BinaryFormat.kafkaDeserializer() =
|
||||
Deserializer { topic: String, data: ByteArray ->
|
||||
runCatching {
|
||||
decodeFromByteArray<T>(data)
|
||||
}.getOrElse { e ->
|
||||
println(
|
||||
"""
|
||||
Exception on decodeFromString,
|
||||
Topic: $topic
|
||||
topicData: $data
|
||||
topicData as T: ${data as? T}
|
||||
""".trimIndent()
|
||||
)
|
||||
e.printStackTrace()
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <reified T> BinaryFormat.serde() = object : Serde<T> {
|
||||
override fun serializer(): Serializer<T> = kafkaSerializer()
|
||||
override fun deserializer(): Deserializer<T> = kafkaDeserializer()
|
||||
}
|
||||
|
|
@ -12,6 +12,7 @@ import org.http4k.format.ConfigurableKotlinxSerialization
|
|||
import org.http4k.format.asConfigurable
|
||||
import org.http4k.format.withStandardMappings
|
||||
|
||||
|
||||
object KafkatorioPacketSerde : Serde<KafkatorioPacket> {
|
||||
override fun serializer() = Serializer<KafkatorioPacket> { _, message ->
|
||||
jsonMapper.encodeToString<KafkatorioPacket>(message).encodeToByteArray()
|
||||
|
|
|
|||
|
|
@ -1,59 +1,6 @@
|
|||
package dev.adamko.kafkatorio.processor.serdes
|
||||
|
||||
import dev.adamko.kafkatorio.events.schema.jsonMapperKafkatorio
|
||||
import kotlinx.serialization.BinaryFormat
|
||||
import kotlinx.serialization.decodeFromByteArray
|
||||
import kotlinx.serialization.encodeToByteArray
|
||||
import kotlinx.serialization.protobuf.ProtoBuf
|
||||
import org.apache.kafka.common.serialization.Deserializer
|
||||
import org.apache.kafka.common.serialization.Serde
|
||||
import org.apache.kafka.common.serialization.Serializer
|
||||
|
||||
val protoMapper: ProtoBuf = ProtoBuf {
|
||||
serializersModule = jsonMapperKafkatorio.serializersModule
|
||||
}
|
||||
|
||||
|
||||
inline fun <reified T> BinaryFormat.kafkaSerializer() =
|
||||
Serializer { topic: String, data: T ->
|
||||
runCatching {
|
||||
encodeToByteArray(data)
|
||||
}.getOrElse { e ->
|
||||
println(
|
||||
"""
|
||||
Exception on encodeToString
|
||||
Topic: $topic
|
||||
topicData: $data
|
||||
topicData as T: $data
|
||||
""".trimIndent()
|
||||
)
|
||||
e.printStackTrace()
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <reified T> BinaryFormat.kafkaDeserializer() =
|
||||
Deserializer { topic: String, data: ByteArray ->
|
||||
runCatching {
|
||||
decodeFromByteArray<T>(data)
|
||||
}.getOrElse { e ->
|
||||
println(
|
||||
"""
|
||||
Exception on decodeFromString,
|
||||
Topic: $topic
|
||||
topicData: $data
|
||||
topicData as T: ${data as? T}
|
||||
""".trimIndent()
|
||||
)
|
||||
e.printStackTrace()
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <reified T> ProtoBuf.serde() = object : Serde<T> {
|
||||
|
||||
override fun serializer(): Serializer<T> = kafkaSerializer()
|
||||
|
||||
override fun deserializer(): Deserializer<T> = kafkaDeserializer()
|
||||
|
||||
}
|
||||
val protoMapper: ProtoBuf = ProtoBuf { }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue