in core/src/main/scala/org/apache/pekko/projection/internal/OffsetSerialization.scala [94:122]
def toStorageRepresentation[Offset](
id: ProjectionId,
offset: Offset,
mergeable: Boolean = false): StorageRepresentation = {
val reps = offset match {
case s: String => SingleOffset(id, StringManifest, s, mergeable)
case l: Long => SingleOffset(id, LongManifest, l.toString, mergeable)
case i: Int => SingleOffset(id, IntManifest, i.toString, mergeable)
case seq: query.Sequence => SingleOffset(id, SequenceManifest, seq.value.toString, mergeable)
case tbu: query.TimeBasedUUID => SingleOffset(id, TimeBasedUUIDManifest, tbu.value.toString, mergeable)
case mrg: MergeableOffset[_] =>
val list = mrg.entries.map {
case (key, innerOffset) =>
toStorageRepresentation(ProjectionId(id.name, key), innerOffset, mergeable = true)
.asInstanceOf[SingleOffset]
}.toList
MultipleOffsets(list)
case _ =>
val obj = offset.asInstanceOf[AnyRef]
val serializer = serialization.findSerializerFor(obj)
val serializerId = serializer.identifier
val serializerManifest = Serializers.manifestFor(serializer, obj)
val bytes = serializer.toBinary(obj)
val offsetStr = Base64.getEncoder.encodeToString(bytes)
SingleOffset(id, s"$serializerId:$serializerManifest", offsetStr)
}
reps
}