Skip to content

Instantly share code, notes, and snippets.

@mostr
Created November 30, 2019 14:45
Show Gist options
  • Save mostr/755c9ad7980313eb713a5d3026d0ea7f to your computer and use it in GitHub Desktop.
Save mostr/755c9ad7980313eb713a5d3026d0ea7f to your computer and use it in GitHub Desktop.
Akka references serialization with Protobufs - 1
// allow serialization of akka goodies, e.g. streamrefs that we use
object AkkaRefsSerializationOps {
def toProtoPayload(akkaRefToSerialize: AnyRef)(implicit system: ActorSystem): SerializedAkkaPayload = {
val ext = SerializationExtension(system)
val serializer = ext.findSerializerFor(akkaRefToSerialize)
val manifest = Serializers.manifestFor(serializer, akkaRefToSerialize)
val sinkSerialized = ByteString.copyFrom(serializer.toBinary(akkaRefToSerialize))
SerializedAkkaPayload(sinkSerialized, manifest, serializer.identifier)
}
def fromProtoPayload[T](proto: SerializedAkkaPayload)(implicit system: ActorSystem): T = {
val sinkRef = SerializationExtension(system).deserialize(proto.payload.toByteArray, proto.serializerId.toInt, proto.manifest)
sinkRef.get.asInstanceOf[T]
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment