package com.programming.kotlin.chapter12.hello.api import akka.util.ByteString import com.lightbend.lagom.javadsl.api.deser.MessageSerializer import com.lightbend.lagom.javadsl.api.deser.SerializationException import com.lightbend.lagom.javadsl.api.deser.StrictMessageSerializer import com.lightbend.lagom.javadsl.api.transport.MessageProtocol import com.lightbend.lagom.javadsl.api.transport.NotAcceptable import com.lightbend.lagom.javadsl.api.transport.UnsupportedMediaType class GreetingMessageSerializer : StrictMessageSerializer { internal var serializer: MessageSerializer.NegotiatedSerializer = object : MessageSerializer.NegotiatedSerializer { override fun protocol(): MessageProtocol { return MessageProtocol().withContentType("application/json") } @Throws(SerializationException::class) override fun serialize(messageEntity: GreetingMessage): ByteString { return ByteString.fromArray(Jackson.mapper.writeValueAsBytes(messageEntity)) } } internal var deserializer = MessageSerializer.NegotiatedDeserializer { bytes -> Jackson.mapper.readValue(bytes.iterator().asInputStream(), GreetingMessage::class.java) } override fun serializerForRequest(): MessageSerializer.NegotiatedSerializer = serializer @Throws(UnsupportedMediaType::class) override fun deserializer(protocol: MessageProtocol): MessageSerializer.NegotiatedDeserializer = deserializer @Throws(NotAcceptable::class) override fun serializerForResponse(acceptedMessageProtocols: List): MessageSerializer.NegotiatedSerializer = serializer }