diff --git a/akka-persistence-query/src/main/java/akka/persistence/query/internal/protobuf/QueryMessages.java b/akka-persistence-query/src/main/java/akka/persistence/query/internal/protobuf/QueryMessages.java new file mode 100644 index 0000000000..976784b5e9 --- /dev/null +++ b/akka-persistence-query/src/main/java/akka/persistence/query/internal/protobuf/QueryMessages.java @@ -0,0 +1,2061 @@ +/* + * Copyright (C) 2021 Lightbend Inc. + */ + +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: QueryMessages.proto + +package akka.persistence.query.internal.protobuf; + +public final class QueryMessages { + private QueryMessages() {} + + public static void registerAllExtensions( + akka.protobufv3.internal.ExtensionRegistryLite registry) {} + + public static void registerAllExtensions(akka.protobufv3.internal.ExtensionRegistry registry) { + registerAllExtensions((akka.protobufv3.internal.ExtensionRegistryLite) registry); + } + + public interface EventEnvelopeOrBuilder + extends + // @@protoc_insertion_point(interface_extends:akka.persistence.query.EventEnvelope) + akka.protobufv3.internal.MessageOrBuilder { + + /** + * required string persistence_id = 1; + * + * @return Whether the persistenceId field is set. + */ + boolean hasPersistenceId(); + /** + * required string persistence_id = 1; + * + * @return The persistenceId. + */ + java.lang.String getPersistenceId(); + /** + * required string persistence_id = 1; + * + * @return The bytes for persistenceId. + */ + akka.protobufv3.internal.ByteString getPersistenceIdBytes(); + + /** + * required string entity_type = 2; + * + * @return Whether the entityType field is set. + */ + boolean hasEntityType(); + /** + * required string entity_type = 2; + * + * @return The entityType. + */ + java.lang.String getEntityType(); + /** + * required string entity_type = 2; + * + * @return The bytes for entityType. + */ + akka.protobufv3.internal.ByteString getEntityTypeBytes(); + + /** + * required int32 slice = 3; + * + * @return Whether the slice field is set. + */ + boolean hasSlice(); + /** + * required int32 slice = 3; + * + * @return The slice. + */ + int getSlice(); + + /** + * required int64 sequence_nr = 4; + * + * @return Whether the sequenceNr field is set. + */ + boolean hasSequenceNr(); + /** + * required int64 sequence_nr = 4; + * + * @return The sequenceNr. + */ + long getSequenceNr(); + + /** + * required int64 timestamp = 5; + * + * @return Whether the timestamp field is set. + */ + boolean hasTimestamp(); + /** + * required int64 timestamp = 5; + * + * @return The timestamp. + */ + long getTimestamp(); + + /** + * required string offset = 6; + * + * @return Whether the offset field is set. + */ + boolean hasOffset(); + /** + * required string offset = 6; + * + * @return The offset. + */ + java.lang.String getOffset(); + /** + * required string offset = 6; + * + * @return The bytes for offset. + */ + akka.protobufv3.internal.ByteString getOffsetBytes(); + + /** + * required string offset_manifest = 7; + * + * @return Whether the offsetManifest field is set. + */ + boolean hasOffsetManifest(); + /** + * required string offset_manifest = 7; + * + * @return The offsetManifest. + */ + java.lang.String getOffsetManifest(); + /** + * required string offset_manifest = 7; + * + * @return The bytes for offsetManifest. + */ + akka.protobufv3.internal.ByteString getOffsetManifestBytes(); + + /** + * optional .Payload event = 8; + * + * @return Whether the event field is set. + */ + boolean hasEvent(); + /** + * optional .Payload event = 8; + * + * @return The event. + */ + akka.remote.ContainerFormats.Payload getEvent(); + /** optional .Payload event = 8; */ + akka.remote.ContainerFormats.PayloadOrBuilder getEventOrBuilder(); + + /** + * optional .Payload metadata = 9; + * + * @return Whether the metadata field is set. + */ + boolean hasMetadata(); + /** + * optional .Payload metadata = 9; + * + * @return The metadata. + */ + akka.remote.ContainerFormats.Payload getMetadata(); + /** optional .Payload metadata = 9; */ + akka.remote.ContainerFormats.PayloadOrBuilder getMetadataOrBuilder(); + } + /** + * + * + *
+   * for akka.persistence.query.typed.EventEnvelope
+   * 
+ * + * Protobuf type {@code akka.persistence.query.EventEnvelope} + */ + public static final class EventEnvelope extends akka.protobufv3.internal.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:akka.persistence.query.EventEnvelope) + EventEnvelopeOrBuilder { + private static final long serialVersionUID = 0L; + // Use EventEnvelope.newBuilder() to construct. + private EventEnvelope(akka.protobufv3.internal.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private EventEnvelope() { + persistenceId_ = ""; + entityType_ = ""; + offset_ = ""; + offsetManifest_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + akka.protobufv3.internal.GeneratedMessageV3.UnusedPrivateParameter unused) { + return new EventEnvelope(); + } + + @java.lang.Override + public final akka.protobufv3.internal.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + + private EventEnvelope( + akka.protobufv3.internal.CodedInputStream input, + akka.protobufv3.internal.ExtensionRegistryLite extensionRegistry) + throws akka.protobufv3.internal.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + akka.protobufv3.internal.UnknownFieldSet.Builder unknownFields = + akka.protobufv3.internal.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + akka.protobufv3.internal.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000001; + persistenceId_ = bs; + break; + } + case 18: + { + akka.protobufv3.internal.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000002; + entityType_ = bs; + break; + } + case 24: + { + bitField0_ |= 0x00000004; + slice_ = input.readInt32(); + break; + } + case 32: + { + bitField0_ |= 0x00000008; + sequenceNr_ = input.readInt64(); + break; + } + case 40: + { + bitField0_ |= 0x00000010; + timestamp_ = input.readInt64(); + break; + } + case 50: + { + akka.protobufv3.internal.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000020; + offset_ = bs; + break; + } + case 58: + { + akka.protobufv3.internal.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000040; + offsetManifest_ = bs; + break; + } + case 66: + { + akka.remote.ContainerFormats.Payload.Builder subBuilder = null; + if (((bitField0_ & 0x00000080) != 0)) { + subBuilder = event_.toBuilder(); + } + event_ = + input.readMessage( + akka.remote.ContainerFormats.Payload.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(event_); + event_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000080; + break; + } + case 74: + { + akka.remote.ContainerFormats.Payload.Builder subBuilder = null; + if (((bitField0_ & 0x00000100) != 0)) { + subBuilder = metadata_.toBuilder(); + } + metadata_ = + input.readMessage( + akka.remote.ContainerFormats.Payload.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(metadata_); + metadata_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000100; + break; + } + default: + { + if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (akka.protobufv3.internal.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new akka.protobufv3.internal.InvalidProtocolBufferException(e) + .setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + + public static final akka.protobufv3.internal.Descriptors.Descriptor getDescriptor() { + return akka.persistence.query.internal.protobuf.QueryMessages + .internal_static_akka_persistence_query_EventEnvelope_descriptor; + } + + @java.lang.Override + protected akka.protobufv3.internal.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return akka.persistence.query.internal.protobuf.QueryMessages + .internal_static_akka_persistence_query_EventEnvelope_fieldAccessorTable + .ensureFieldAccessorsInitialized( + akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope.class, + akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope.Builder.class); + } + + private int bitField0_; + public static final int PERSISTENCE_ID_FIELD_NUMBER = 1; + private volatile java.lang.Object persistenceId_; + /** + * required string persistence_id = 1; + * + * @return Whether the persistenceId field is set. + */ + public boolean hasPersistenceId() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * required string persistence_id = 1; + * + * @return The persistenceId. + */ + public java.lang.String getPersistenceId() { + java.lang.Object ref = persistenceId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + akka.protobufv3.internal.ByteString bs = (akka.protobufv3.internal.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + persistenceId_ = s; + } + return s; + } + } + /** + * required string persistence_id = 1; + * + * @return The bytes for persistenceId. + */ + public akka.protobufv3.internal.ByteString getPersistenceIdBytes() { + java.lang.Object ref = persistenceId_; + if (ref instanceof java.lang.String) { + akka.protobufv3.internal.ByteString b = + akka.protobufv3.internal.ByteString.copyFromUtf8((java.lang.String) ref); + persistenceId_ = b; + return b; + } else { + return (akka.protobufv3.internal.ByteString) ref; + } + } + + public static final int ENTITY_TYPE_FIELD_NUMBER = 2; + private volatile java.lang.Object entityType_; + /** + * required string entity_type = 2; + * + * @return Whether the entityType field is set. + */ + public boolean hasEntityType() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * required string entity_type = 2; + * + * @return The entityType. + */ + public java.lang.String getEntityType() { + java.lang.Object ref = entityType_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + akka.protobufv3.internal.ByteString bs = (akka.protobufv3.internal.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + entityType_ = s; + } + return s; + } + } + /** + * required string entity_type = 2; + * + * @return The bytes for entityType. + */ + public akka.protobufv3.internal.ByteString getEntityTypeBytes() { + java.lang.Object ref = entityType_; + if (ref instanceof java.lang.String) { + akka.protobufv3.internal.ByteString b = + akka.protobufv3.internal.ByteString.copyFromUtf8((java.lang.String) ref); + entityType_ = b; + return b; + } else { + return (akka.protobufv3.internal.ByteString) ref; + } + } + + public static final int SLICE_FIELD_NUMBER = 3; + private int slice_; + /** + * required int32 slice = 3; + * + * @return Whether the slice field is set. + */ + public boolean hasSlice() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + * required int32 slice = 3; + * + * @return The slice. + */ + public int getSlice() { + return slice_; + } + + public static final int SEQUENCE_NR_FIELD_NUMBER = 4; + private long sequenceNr_; + /** + * required int64 sequence_nr = 4; + * + * @return Whether the sequenceNr field is set. + */ + public boolean hasSequenceNr() { + return ((bitField0_ & 0x00000008) != 0); + } + /** + * required int64 sequence_nr = 4; + * + * @return The sequenceNr. + */ + public long getSequenceNr() { + return sequenceNr_; + } + + public static final int TIMESTAMP_FIELD_NUMBER = 5; + private long timestamp_; + /** + * required int64 timestamp = 5; + * + * @return Whether the timestamp field is set. + */ + public boolean hasTimestamp() { + return ((bitField0_ & 0x00000010) != 0); + } + /** + * required int64 timestamp = 5; + * + * @return The timestamp. + */ + public long getTimestamp() { + return timestamp_; + } + + public static final int OFFSET_FIELD_NUMBER = 6; + private volatile java.lang.Object offset_; + /** + * required string offset = 6; + * + * @return Whether the offset field is set. + */ + public boolean hasOffset() { + return ((bitField0_ & 0x00000020) != 0); + } + /** + * required string offset = 6; + * + * @return The offset. + */ + public java.lang.String getOffset() { + java.lang.Object ref = offset_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + akka.protobufv3.internal.ByteString bs = (akka.protobufv3.internal.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + offset_ = s; + } + return s; + } + } + /** + * required string offset = 6; + * + * @return The bytes for offset. + */ + public akka.protobufv3.internal.ByteString getOffsetBytes() { + java.lang.Object ref = offset_; + if (ref instanceof java.lang.String) { + akka.protobufv3.internal.ByteString b = + akka.protobufv3.internal.ByteString.copyFromUtf8((java.lang.String) ref); + offset_ = b; + return b; + } else { + return (akka.protobufv3.internal.ByteString) ref; + } + } + + public static final int OFFSET_MANIFEST_FIELD_NUMBER = 7; + private volatile java.lang.Object offsetManifest_; + /** + * required string offset_manifest = 7; + * + * @return Whether the offsetManifest field is set. + */ + public boolean hasOffsetManifest() { + return ((bitField0_ & 0x00000040) != 0); + } + /** + * required string offset_manifest = 7; + * + * @return The offsetManifest. + */ + public java.lang.String getOffsetManifest() { + java.lang.Object ref = offsetManifest_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + akka.protobufv3.internal.ByteString bs = (akka.protobufv3.internal.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + offsetManifest_ = s; + } + return s; + } + } + /** + * required string offset_manifest = 7; + * + * @return The bytes for offsetManifest. + */ + public akka.protobufv3.internal.ByteString getOffsetManifestBytes() { + java.lang.Object ref = offsetManifest_; + if (ref instanceof java.lang.String) { + akka.protobufv3.internal.ByteString b = + akka.protobufv3.internal.ByteString.copyFromUtf8((java.lang.String) ref); + offsetManifest_ = b; + return b; + } else { + return (akka.protobufv3.internal.ByteString) ref; + } + } + + public static final int EVENT_FIELD_NUMBER = 8; + private akka.remote.ContainerFormats.Payload event_; + /** + * optional .Payload event = 8; + * + * @return Whether the event field is set. + */ + public boolean hasEvent() { + return ((bitField0_ & 0x00000080) != 0); + } + /** + * optional .Payload event = 8; + * + * @return The event. + */ + public akka.remote.ContainerFormats.Payload getEvent() { + return event_ == null ? akka.remote.ContainerFormats.Payload.getDefaultInstance() : event_; + } + /** optional .Payload event = 8; */ + public akka.remote.ContainerFormats.PayloadOrBuilder getEventOrBuilder() { + return event_ == null ? akka.remote.ContainerFormats.Payload.getDefaultInstance() : event_; + } + + public static final int METADATA_FIELD_NUMBER = 9; + private akka.remote.ContainerFormats.Payload metadata_; + /** + * optional .Payload metadata = 9; + * + * @return Whether the metadata field is set. + */ + public boolean hasMetadata() { + return ((bitField0_ & 0x00000100) != 0); + } + /** + * optional .Payload metadata = 9; + * + * @return The metadata. + */ + public akka.remote.ContainerFormats.Payload getMetadata() { + return metadata_ == null + ? akka.remote.ContainerFormats.Payload.getDefaultInstance() + : metadata_; + } + /** optional .Payload metadata = 9; */ + public akka.remote.ContainerFormats.PayloadOrBuilder getMetadataOrBuilder() { + return metadata_ == null + ? akka.remote.ContainerFormats.Payload.getDefaultInstance() + : metadata_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + if (!hasPersistenceId()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasEntityType()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasSlice()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasSequenceNr()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasTimestamp()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasOffset()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasOffsetManifest()) { + memoizedIsInitialized = 0; + return false; + } + if (hasEvent()) { + if (!getEvent().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasMetadata()) { + if (!getMetadata().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(akka.protobufv3.internal.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + akka.protobufv3.internal.GeneratedMessageV3.writeString(output, 1, persistenceId_); + } + if (((bitField0_ & 0x00000002) != 0)) { + akka.protobufv3.internal.GeneratedMessageV3.writeString(output, 2, entityType_); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeInt32(3, slice_); + } + if (((bitField0_ & 0x00000008) != 0)) { + output.writeInt64(4, sequenceNr_); + } + if (((bitField0_ & 0x00000010) != 0)) { + output.writeInt64(5, timestamp_); + } + if (((bitField0_ & 0x00000020) != 0)) { + akka.protobufv3.internal.GeneratedMessageV3.writeString(output, 6, offset_); + } + if (((bitField0_ & 0x00000040) != 0)) { + akka.protobufv3.internal.GeneratedMessageV3.writeString(output, 7, offsetManifest_); + } + if (((bitField0_ & 0x00000080) != 0)) { + output.writeMessage(8, getEvent()); + } + if (((bitField0_ & 0x00000100) != 0)) { + output.writeMessage(9, getMetadata()); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += akka.protobufv3.internal.GeneratedMessageV3.computeStringSize(1, persistenceId_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += akka.protobufv3.internal.GeneratedMessageV3.computeStringSize(2, entityType_); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += akka.protobufv3.internal.CodedOutputStream.computeInt32Size(3, slice_); + } + if (((bitField0_ & 0x00000008) != 0)) { + size += akka.protobufv3.internal.CodedOutputStream.computeInt64Size(4, sequenceNr_); + } + if (((bitField0_ & 0x00000010) != 0)) { + size += akka.protobufv3.internal.CodedOutputStream.computeInt64Size(5, timestamp_); + } + if (((bitField0_ & 0x00000020) != 0)) { + size += akka.protobufv3.internal.GeneratedMessageV3.computeStringSize(6, offset_); + } + if (((bitField0_ & 0x00000040) != 0)) { + size += akka.protobufv3.internal.GeneratedMessageV3.computeStringSize(7, offsetManifest_); + } + if (((bitField0_ & 0x00000080) != 0)) { + size += akka.protobufv3.internal.CodedOutputStream.computeMessageSize(8, getEvent()); + } + if (((bitField0_ & 0x00000100) != 0)) { + size += akka.protobufv3.internal.CodedOutputStream.computeMessageSize(9, getMetadata()); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope)) { + return super.equals(obj); + } + akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope other = + (akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope) obj; + + if (hasPersistenceId() != other.hasPersistenceId()) return false; + if (hasPersistenceId()) { + if (!getPersistenceId().equals(other.getPersistenceId())) return false; + } + if (hasEntityType() != other.hasEntityType()) return false; + if (hasEntityType()) { + if (!getEntityType().equals(other.getEntityType())) return false; + } + if (hasSlice() != other.hasSlice()) return false; + if (hasSlice()) { + if (getSlice() != other.getSlice()) return false; + } + if (hasSequenceNr() != other.hasSequenceNr()) return false; + if (hasSequenceNr()) { + if (getSequenceNr() != other.getSequenceNr()) return false; + } + if (hasTimestamp() != other.hasTimestamp()) return false; + if (hasTimestamp()) { + if (getTimestamp() != other.getTimestamp()) return false; + } + if (hasOffset() != other.hasOffset()) return false; + if (hasOffset()) { + if (!getOffset().equals(other.getOffset())) return false; + } + if (hasOffsetManifest() != other.hasOffsetManifest()) return false; + if (hasOffsetManifest()) { + if (!getOffsetManifest().equals(other.getOffsetManifest())) return false; + } + if (hasEvent() != other.hasEvent()) return false; + if (hasEvent()) { + if (!getEvent().equals(other.getEvent())) return false; + } + if (hasMetadata() != other.hasMetadata()) return false; + if (hasMetadata()) { + if (!getMetadata().equals(other.getMetadata())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasPersistenceId()) { + hash = (37 * hash) + PERSISTENCE_ID_FIELD_NUMBER; + hash = (53 * hash) + getPersistenceId().hashCode(); + } + if (hasEntityType()) { + hash = (37 * hash) + ENTITY_TYPE_FIELD_NUMBER; + hash = (53 * hash) + getEntityType().hashCode(); + } + if (hasSlice()) { + hash = (37 * hash) + SLICE_FIELD_NUMBER; + hash = (53 * hash) + getSlice(); + } + if (hasSequenceNr()) { + hash = (37 * hash) + SEQUENCE_NR_FIELD_NUMBER; + hash = (53 * hash) + akka.protobufv3.internal.Internal.hashLong(getSequenceNr()); + } + if (hasTimestamp()) { + hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER; + hash = (53 * hash) + akka.protobufv3.internal.Internal.hashLong(getTimestamp()); + } + if (hasOffset()) { + hash = (37 * hash) + OFFSET_FIELD_NUMBER; + hash = (53 * hash) + getOffset().hashCode(); + } + if (hasOffsetManifest()) { + hash = (37 * hash) + OFFSET_MANIFEST_FIELD_NUMBER; + hash = (53 * hash) + getOffsetManifest().hashCode(); + } + if (hasEvent()) { + hash = (37 * hash) + EVENT_FIELD_NUMBER; + hash = (53 * hash) + getEvent().hashCode(); + } + if (hasMetadata()) { + hash = (37 * hash) + METADATA_FIELD_NUMBER; + hash = (53 * hash) + getMetadata().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope parseFrom( + java.nio.ByteBuffer data) throws akka.protobufv3.internal.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope parseFrom( + java.nio.ByteBuffer data, akka.protobufv3.internal.ExtensionRegistryLite extensionRegistry) + throws akka.protobufv3.internal.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope parseFrom( + akka.protobufv3.internal.ByteString data) + throws akka.protobufv3.internal.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope parseFrom( + akka.protobufv3.internal.ByteString data, + akka.protobufv3.internal.ExtensionRegistryLite extensionRegistry) + throws akka.protobufv3.internal.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope parseFrom( + byte[] data) throws akka.protobufv3.internal.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope parseFrom( + byte[] data, akka.protobufv3.internal.ExtensionRegistryLite extensionRegistry) + throws akka.protobufv3.internal.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope parseFrom( + java.io.InputStream input) throws java.io.IOException { + return akka.protobufv3.internal.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope parseFrom( + java.io.InputStream input, akka.protobufv3.internal.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return akka.protobufv3.internal.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return akka.protobufv3.internal.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input); + } + + public static akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope + parseDelimitedFrom( + java.io.InputStream input, + akka.protobufv3.internal.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return akka.protobufv3.internal.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope parseFrom( + akka.protobufv3.internal.CodedInputStream input) throws java.io.IOException { + return akka.protobufv3.internal.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope parseFrom( + akka.protobufv3.internal.CodedInputStream input, + akka.protobufv3.internal.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return akka.protobufv3.internal.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + akka.protobufv3.internal.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * + * + *
+     * for akka.persistence.query.typed.EventEnvelope
+     * 
+ * + * Protobuf type {@code akka.persistence.query.EventEnvelope} + */ + public static final class Builder + extends akka.protobufv3.internal.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:akka.persistence.query.EventEnvelope) + akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelopeOrBuilder { + public static final akka.protobufv3.internal.Descriptors.Descriptor getDescriptor() { + return akka.persistence.query.internal.protobuf.QueryMessages + .internal_static_akka_persistence_query_EventEnvelope_descriptor; + } + + @java.lang.Override + protected akka.protobufv3.internal.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return akka.persistence.query.internal.protobuf.QueryMessages + .internal_static_akka_persistence_query_EventEnvelope_fieldAccessorTable + .ensureFieldAccessorsInitialized( + akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope.class, + akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope.Builder.class); + } + + // Construct using + // akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(akka.protobufv3.internal.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (akka.protobufv3.internal.GeneratedMessageV3.alwaysUseFieldBuilders) { + getEventFieldBuilder(); + getMetadataFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + persistenceId_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + entityType_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + slice_ = 0; + bitField0_ = (bitField0_ & ~0x00000004); + sequenceNr_ = 0L; + bitField0_ = (bitField0_ & ~0x00000008); + timestamp_ = 0L; + bitField0_ = (bitField0_ & ~0x00000010); + offset_ = ""; + bitField0_ = (bitField0_ & ~0x00000020); + offsetManifest_ = ""; + bitField0_ = (bitField0_ & ~0x00000040); + if (eventBuilder_ == null) { + event_ = null; + } else { + eventBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + if (metadataBuilder_ == null) { + metadata_ = null; + } else { + metadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + return this; + } + + @java.lang.Override + public akka.protobufv3.internal.Descriptors.Descriptor getDescriptorForType() { + return akka.persistence.query.internal.protobuf.QueryMessages + .internal_static_akka_persistence_query_EventEnvelope_descriptor; + } + + @java.lang.Override + public akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope + getDefaultInstanceForType() { + return akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope + .getDefaultInstance(); + } + + @java.lang.Override + public akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope build() { + akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope buildPartial() { + akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope result = + new akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.persistenceId_ = persistenceId_; + if (((from_bitField0_ & 0x00000002) != 0)) { + to_bitField0_ |= 0x00000002; + } + result.entityType_ = entityType_; + if (((from_bitField0_ & 0x00000004) != 0)) { + result.slice_ = slice_; + to_bitField0_ |= 0x00000004; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.sequenceNr_ = sequenceNr_; + to_bitField0_ |= 0x00000008; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.timestamp_ = timestamp_; + to_bitField0_ |= 0x00000010; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + to_bitField0_ |= 0x00000020; + } + result.offset_ = offset_; + if (((from_bitField0_ & 0x00000040) != 0)) { + to_bitField0_ |= 0x00000040; + } + result.offsetManifest_ = offsetManifest_; + if (((from_bitField0_ & 0x00000080) != 0)) { + if (eventBuilder_ == null) { + result.event_ = event_; + } else { + result.event_ = eventBuilder_.build(); + } + to_bitField0_ |= 0x00000080; + } + if (((from_bitField0_ & 0x00000100) != 0)) { + if (metadataBuilder_ == null) { + result.metadata_ = metadata_; + } else { + result.metadata_ = metadataBuilder_.build(); + } + to_bitField0_ |= 0x00000100; + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + akka.protobufv3.internal.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(akka.protobufv3.internal.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(akka.protobufv3.internal.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + akka.protobufv3.internal.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + akka.protobufv3.internal.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(akka.protobufv3.internal.Message other) { + if (other instanceof akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope) { + return mergeFrom( + (akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope other) { + if (other + == akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope + .getDefaultInstance()) return this; + if (other.hasPersistenceId()) { + bitField0_ |= 0x00000001; + persistenceId_ = other.persistenceId_; + onChanged(); + } + if (other.hasEntityType()) { + bitField0_ |= 0x00000002; + entityType_ = other.entityType_; + onChanged(); + } + if (other.hasSlice()) { + setSlice(other.getSlice()); + } + if (other.hasSequenceNr()) { + setSequenceNr(other.getSequenceNr()); + } + if (other.hasTimestamp()) { + setTimestamp(other.getTimestamp()); + } + if (other.hasOffset()) { + bitField0_ |= 0x00000020; + offset_ = other.offset_; + onChanged(); + } + if (other.hasOffsetManifest()) { + bitField0_ |= 0x00000040; + offsetManifest_ = other.offsetManifest_; + onChanged(); + } + if (other.hasEvent()) { + mergeEvent(other.getEvent()); + } + if (other.hasMetadata()) { + mergeMetadata(other.getMetadata()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + if (!hasPersistenceId()) { + return false; + } + if (!hasEntityType()) { + return false; + } + if (!hasSlice()) { + return false; + } + if (!hasSequenceNr()) { + return false; + } + if (!hasTimestamp()) { + return false; + } + if (!hasOffset()) { + return false; + } + if (!hasOffsetManifest()) { + return false; + } + if (hasEvent()) { + if (!getEvent().isInitialized()) { + return false; + } + } + if (hasMetadata()) { + if (!getMetadata().isInitialized()) { + return false; + } + } + return true; + } + + @java.lang.Override + public Builder mergeFrom( + akka.protobufv3.internal.CodedInputStream input, + akka.protobufv3.internal.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (akka.protobufv3.internal.InvalidProtocolBufferException e) { + parsedMessage = + (akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope) + e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private int bitField0_; + + private java.lang.Object persistenceId_ = ""; + /** + * required string persistence_id = 1; + * + * @return Whether the persistenceId field is set. + */ + public boolean hasPersistenceId() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * required string persistence_id = 1; + * + * @return The persistenceId. + */ + public java.lang.String getPersistenceId() { + java.lang.Object ref = persistenceId_; + if (!(ref instanceof java.lang.String)) { + akka.protobufv3.internal.ByteString bs = (akka.protobufv3.internal.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + persistenceId_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * required string persistence_id = 1; + * + * @return The bytes for persistenceId. + */ + public akka.protobufv3.internal.ByteString getPersistenceIdBytes() { + java.lang.Object ref = persistenceId_; + if (ref instanceof String) { + akka.protobufv3.internal.ByteString b = + akka.protobufv3.internal.ByteString.copyFromUtf8((java.lang.String) ref); + persistenceId_ = b; + return b; + } else { + return (akka.protobufv3.internal.ByteString) ref; + } + } + /** + * required string persistence_id = 1; + * + * @param value The persistenceId to set. + * @return This builder for chaining. + */ + public Builder setPersistenceId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + persistenceId_ = value; + onChanged(); + return this; + } + /** + * required string persistence_id = 1; + * + * @return This builder for chaining. + */ + public Builder clearPersistenceId() { + bitField0_ = (bitField0_ & ~0x00000001); + persistenceId_ = getDefaultInstance().getPersistenceId(); + onChanged(); + return this; + } + /** + * required string persistence_id = 1; + * + * @param value The bytes for persistenceId to set. + * @return This builder for chaining. + */ + public Builder setPersistenceIdBytes(akka.protobufv3.internal.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + persistenceId_ = value; + onChanged(); + return this; + } + + private java.lang.Object entityType_ = ""; + /** + * required string entity_type = 2; + * + * @return Whether the entityType field is set. + */ + public boolean hasEntityType() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * required string entity_type = 2; + * + * @return The entityType. + */ + public java.lang.String getEntityType() { + java.lang.Object ref = entityType_; + if (!(ref instanceof java.lang.String)) { + akka.protobufv3.internal.ByteString bs = (akka.protobufv3.internal.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + entityType_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * required string entity_type = 2; + * + * @return The bytes for entityType. + */ + public akka.protobufv3.internal.ByteString getEntityTypeBytes() { + java.lang.Object ref = entityType_; + if (ref instanceof String) { + akka.protobufv3.internal.ByteString b = + akka.protobufv3.internal.ByteString.copyFromUtf8((java.lang.String) ref); + entityType_ = b; + return b; + } else { + return (akka.protobufv3.internal.ByteString) ref; + } + } + /** + * required string entity_type = 2; + * + * @param value The entityType to set. + * @return This builder for chaining. + */ + public Builder setEntityType(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + entityType_ = value; + onChanged(); + return this; + } + /** + * required string entity_type = 2; + * + * @return This builder for chaining. + */ + public Builder clearEntityType() { + bitField0_ = (bitField0_ & ~0x00000002); + entityType_ = getDefaultInstance().getEntityType(); + onChanged(); + return this; + } + /** + * required string entity_type = 2; + * + * @param value The bytes for entityType to set. + * @return This builder for chaining. + */ + public Builder setEntityTypeBytes(akka.protobufv3.internal.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + entityType_ = value; + onChanged(); + return this; + } + + private int slice_; + /** + * required int32 slice = 3; + * + * @return Whether the slice field is set. + */ + public boolean hasSlice() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + * required int32 slice = 3; + * + * @return The slice. + */ + public int getSlice() { + return slice_; + } + /** + * required int32 slice = 3; + * + * @param value The slice to set. + * @return This builder for chaining. + */ + public Builder setSlice(int value) { + bitField0_ |= 0x00000004; + slice_ = value; + onChanged(); + return this; + } + /** + * required int32 slice = 3; + * + * @return This builder for chaining. + */ + public Builder clearSlice() { + bitField0_ = (bitField0_ & ~0x00000004); + slice_ = 0; + onChanged(); + return this; + } + + private long sequenceNr_; + /** + * required int64 sequence_nr = 4; + * + * @return Whether the sequenceNr field is set. + */ + public boolean hasSequenceNr() { + return ((bitField0_ & 0x00000008) != 0); + } + /** + * required int64 sequence_nr = 4; + * + * @return The sequenceNr. + */ + public long getSequenceNr() { + return sequenceNr_; + } + /** + * required int64 sequence_nr = 4; + * + * @param value The sequenceNr to set. + * @return This builder for chaining. + */ + public Builder setSequenceNr(long value) { + bitField0_ |= 0x00000008; + sequenceNr_ = value; + onChanged(); + return this; + } + /** + * required int64 sequence_nr = 4; + * + * @return This builder for chaining. + */ + public Builder clearSequenceNr() { + bitField0_ = (bitField0_ & ~0x00000008); + sequenceNr_ = 0L; + onChanged(); + return this; + } + + private long timestamp_; + /** + * required int64 timestamp = 5; + * + * @return Whether the timestamp field is set. + */ + public boolean hasTimestamp() { + return ((bitField0_ & 0x00000010) != 0); + } + /** + * required int64 timestamp = 5; + * + * @return The timestamp. + */ + public long getTimestamp() { + return timestamp_; + } + /** + * required int64 timestamp = 5; + * + * @param value The timestamp to set. + * @return This builder for chaining. + */ + public Builder setTimestamp(long value) { + bitField0_ |= 0x00000010; + timestamp_ = value; + onChanged(); + return this; + } + /** + * required int64 timestamp = 5; + * + * @return This builder for chaining. + */ + public Builder clearTimestamp() { + bitField0_ = (bitField0_ & ~0x00000010); + timestamp_ = 0L; + onChanged(); + return this; + } + + private java.lang.Object offset_ = ""; + /** + * required string offset = 6; + * + * @return Whether the offset field is set. + */ + public boolean hasOffset() { + return ((bitField0_ & 0x00000020) != 0); + } + /** + * required string offset = 6; + * + * @return The offset. + */ + public java.lang.String getOffset() { + java.lang.Object ref = offset_; + if (!(ref instanceof java.lang.String)) { + akka.protobufv3.internal.ByteString bs = (akka.protobufv3.internal.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + offset_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * required string offset = 6; + * + * @return The bytes for offset. + */ + public akka.protobufv3.internal.ByteString getOffsetBytes() { + java.lang.Object ref = offset_; + if (ref instanceof String) { + akka.protobufv3.internal.ByteString b = + akka.protobufv3.internal.ByteString.copyFromUtf8((java.lang.String) ref); + offset_ = b; + return b; + } else { + return (akka.protobufv3.internal.ByteString) ref; + } + } + /** + * required string offset = 6; + * + * @param value The offset to set. + * @return This builder for chaining. + */ + public Builder setOffset(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000020; + offset_ = value; + onChanged(); + return this; + } + /** + * required string offset = 6; + * + * @return This builder for chaining. + */ + public Builder clearOffset() { + bitField0_ = (bitField0_ & ~0x00000020); + offset_ = getDefaultInstance().getOffset(); + onChanged(); + return this; + } + /** + * required string offset = 6; + * + * @param value The bytes for offset to set. + * @return This builder for chaining. + */ + public Builder setOffsetBytes(akka.protobufv3.internal.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000020; + offset_ = value; + onChanged(); + return this; + } + + private java.lang.Object offsetManifest_ = ""; + /** + * required string offset_manifest = 7; + * + * @return Whether the offsetManifest field is set. + */ + public boolean hasOffsetManifest() { + return ((bitField0_ & 0x00000040) != 0); + } + /** + * required string offset_manifest = 7; + * + * @return The offsetManifest. + */ + public java.lang.String getOffsetManifest() { + java.lang.Object ref = offsetManifest_; + if (!(ref instanceof java.lang.String)) { + akka.protobufv3.internal.ByteString bs = (akka.protobufv3.internal.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + offsetManifest_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * required string offset_manifest = 7; + * + * @return The bytes for offsetManifest. + */ + public akka.protobufv3.internal.ByteString getOffsetManifestBytes() { + java.lang.Object ref = offsetManifest_; + if (ref instanceof String) { + akka.protobufv3.internal.ByteString b = + akka.protobufv3.internal.ByteString.copyFromUtf8((java.lang.String) ref); + offsetManifest_ = b; + return b; + } else { + return (akka.protobufv3.internal.ByteString) ref; + } + } + /** + * required string offset_manifest = 7; + * + * @param value The offsetManifest to set. + * @return This builder for chaining. + */ + public Builder setOffsetManifest(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000040; + offsetManifest_ = value; + onChanged(); + return this; + } + /** + * required string offset_manifest = 7; + * + * @return This builder for chaining. + */ + public Builder clearOffsetManifest() { + bitField0_ = (bitField0_ & ~0x00000040); + offsetManifest_ = getDefaultInstance().getOffsetManifest(); + onChanged(); + return this; + } + /** + * required string offset_manifest = 7; + * + * @param value The bytes for offsetManifest to set. + * @return This builder for chaining. + */ + public Builder setOffsetManifestBytes(akka.protobufv3.internal.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000040; + offsetManifest_ = value; + onChanged(); + return this; + } + + private akka.remote.ContainerFormats.Payload event_; + private akka.protobufv3.internal.SingleFieldBuilderV3< + akka.remote.ContainerFormats.Payload, + akka.remote.ContainerFormats.Payload.Builder, + akka.remote.ContainerFormats.PayloadOrBuilder> + eventBuilder_; + /** + * optional .Payload event = 8; + * + * @return Whether the event field is set. + */ + public boolean hasEvent() { + return ((bitField0_ & 0x00000080) != 0); + } + /** + * optional .Payload event = 8; + * + * @return The event. + */ + public akka.remote.ContainerFormats.Payload getEvent() { + if (eventBuilder_ == null) { + return event_ == null + ? akka.remote.ContainerFormats.Payload.getDefaultInstance() + : event_; + } else { + return eventBuilder_.getMessage(); + } + } + /** optional .Payload event = 8; */ + public Builder setEvent(akka.remote.ContainerFormats.Payload value) { + if (eventBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + event_ = value; + onChanged(); + } else { + eventBuilder_.setMessage(value); + } + bitField0_ |= 0x00000080; + return this; + } + /** optional .Payload event = 8; */ + public Builder setEvent(akka.remote.ContainerFormats.Payload.Builder builderForValue) { + if (eventBuilder_ == null) { + event_ = builderForValue.build(); + onChanged(); + } else { + eventBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000080; + return this; + } + /** optional .Payload event = 8; */ + public Builder mergeEvent(akka.remote.ContainerFormats.Payload value) { + if (eventBuilder_ == null) { + if (((bitField0_ & 0x00000080) != 0) + && event_ != null + && event_ != akka.remote.ContainerFormats.Payload.getDefaultInstance()) { + event_ = + akka.remote.ContainerFormats.Payload.newBuilder(event_) + .mergeFrom(value) + .buildPartial(); + } else { + event_ = value; + } + onChanged(); + } else { + eventBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000080; + return this; + } + /** optional .Payload event = 8; */ + public Builder clearEvent() { + if (eventBuilder_ == null) { + event_ = null; + onChanged(); + } else { + eventBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + return this; + } + /** optional .Payload event = 8; */ + public akka.remote.ContainerFormats.Payload.Builder getEventBuilder() { + bitField0_ |= 0x00000080; + onChanged(); + return getEventFieldBuilder().getBuilder(); + } + /** optional .Payload event = 8; */ + public akka.remote.ContainerFormats.PayloadOrBuilder getEventOrBuilder() { + if (eventBuilder_ != null) { + return eventBuilder_.getMessageOrBuilder(); + } else { + return event_ == null + ? akka.remote.ContainerFormats.Payload.getDefaultInstance() + : event_; + } + } + /** optional .Payload event = 8; */ + private akka.protobufv3.internal.SingleFieldBuilderV3< + akka.remote.ContainerFormats.Payload, + akka.remote.ContainerFormats.Payload.Builder, + akka.remote.ContainerFormats.PayloadOrBuilder> + getEventFieldBuilder() { + if (eventBuilder_ == null) { + eventBuilder_ = + new akka.protobufv3.internal.SingleFieldBuilderV3< + akka.remote.ContainerFormats.Payload, + akka.remote.ContainerFormats.Payload.Builder, + akka.remote.ContainerFormats.PayloadOrBuilder>( + getEvent(), getParentForChildren(), isClean()); + event_ = null; + } + return eventBuilder_; + } + + private akka.remote.ContainerFormats.Payload metadata_; + private akka.protobufv3.internal.SingleFieldBuilderV3< + akka.remote.ContainerFormats.Payload, + akka.remote.ContainerFormats.Payload.Builder, + akka.remote.ContainerFormats.PayloadOrBuilder> + metadataBuilder_; + /** + * optional .Payload metadata = 9; + * + * @return Whether the metadata field is set. + */ + public boolean hasMetadata() { + return ((bitField0_ & 0x00000100) != 0); + } + /** + * optional .Payload metadata = 9; + * + * @return The metadata. + */ + public akka.remote.ContainerFormats.Payload getMetadata() { + if (metadataBuilder_ == null) { + return metadata_ == null + ? akka.remote.ContainerFormats.Payload.getDefaultInstance() + : metadata_; + } else { + return metadataBuilder_.getMessage(); + } + } + /** optional .Payload metadata = 9; */ + public Builder setMetadata(akka.remote.ContainerFormats.Payload value) { + if (metadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + metadata_ = value; + onChanged(); + } else { + metadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000100; + return this; + } + /** optional .Payload metadata = 9; */ + public Builder setMetadata(akka.remote.ContainerFormats.Payload.Builder builderForValue) { + if (metadataBuilder_ == null) { + metadata_ = builderForValue.build(); + onChanged(); + } else { + metadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000100; + return this; + } + /** optional .Payload metadata = 9; */ + public Builder mergeMetadata(akka.remote.ContainerFormats.Payload value) { + if (metadataBuilder_ == null) { + if (((bitField0_ & 0x00000100) != 0) + && metadata_ != null + && metadata_ != akka.remote.ContainerFormats.Payload.getDefaultInstance()) { + metadata_ = + akka.remote.ContainerFormats.Payload.newBuilder(metadata_) + .mergeFrom(value) + .buildPartial(); + } else { + metadata_ = value; + } + onChanged(); + } else { + metadataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000100; + return this; + } + /** optional .Payload metadata = 9; */ + public Builder clearMetadata() { + if (metadataBuilder_ == null) { + metadata_ = null; + onChanged(); + } else { + metadataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + return this; + } + /** optional .Payload metadata = 9; */ + public akka.remote.ContainerFormats.Payload.Builder getMetadataBuilder() { + bitField0_ |= 0x00000100; + onChanged(); + return getMetadataFieldBuilder().getBuilder(); + } + /** optional .Payload metadata = 9; */ + public akka.remote.ContainerFormats.PayloadOrBuilder getMetadataOrBuilder() { + if (metadataBuilder_ != null) { + return metadataBuilder_.getMessageOrBuilder(); + } else { + return metadata_ == null + ? akka.remote.ContainerFormats.Payload.getDefaultInstance() + : metadata_; + } + } + /** optional .Payload metadata = 9; */ + private akka.protobufv3.internal.SingleFieldBuilderV3< + akka.remote.ContainerFormats.Payload, + akka.remote.ContainerFormats.Payload.Builder, + akka.remote.ContainerFormats.PayloadOrBuilder> + getMetadataFieldBuilder() { + if (metadataBuilder_ == null) { + metadataBuilder_ = + new akka.protobufv3.internal.SingleFieldBuilderV3< + akka.remote.ContainerFormats.Payload, + akka.remote.ContainerFormats.Payload.Builder, + akka.remote.ContainerFormats.PayloadOrBuilder>( + getMetadata(), getParentForChildren(), isClean()); + metadata_ = null; + } + return metadataBuilder_; + } + + @java.lang.Override + public final Builder setUnknownFields( + final akka.protobufv3.internal.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final akka.protobufv3.internal.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:akka.persistence.query.EventEnvelope) + } + + // @@protoc_insertion_point(class_scope:akka.persistence.query.EventEnvelope) + private static final akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope(); + } + + public static akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated + public static final akka.protobufv3.internal.Parser PARSER = + new akka.protobufv3.internal.AbstractParser() { + @java.lang.Override + public EventEnvelope parsePartialFrom( + akka.protobufv3.internal.CodedInputStream input, + akka.protobufv3.internal.ExtensionRegistryLite extensionRegistry) + throws akka.protobufv3.internal.InvalidProtocolBufferException { + return new EventEnvelope(input, extensionRegistry); + } + }; + + public static akka.protobufv3.internal.Parser parser() { + return PARSER; + } + + @java.lang.Override + public akka.protobufv3.internal.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public akka.persistence.query.internal.protobuf.QueryMessages.EventEnvelope + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private static final akka.protobufv3.internal.Descriptors.Descriptor + internal_static_akka_persistence_query_EventEnvelope_descriptor; + private static final akka.protobufv3.internal.GeneratedMessageV3.FieldAccessorTable + internal_static_akka_persistence_query_EventEnvelope_fieldAccessorTable; + + public static akka.protobufv3.internal.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static akka.protobufv3.internal.Descriptors.FileDescriptor descriptor; + + static { + java.lang.String[] descriptorData = { + "\n\023QueryMessages.proto\022\026akka.persistence." + + "query\032\026ContainerFormats.proto\"\321\001\n\rEventE" + + "nvelope\022\026\n\016persistence_id\030\001 \002(\t\022\023\n\013entit" + + "y_type\030\002 \002(\t\022\r\n\005slice\030\003 \002(\005\022\023\n\013sequence_" + + "nr\030\004 \002(\003\022\021\n\ttimestamp\030\005 \002(\003\022\016\n\006offset\030\006 " + + "\002(\t\022\027\n\017offset_manifest\030\007 \002(\t\022\027\n\005event\030\010 " + + "\001(\0132\010.Payload\022\032\n\010metadata\030\t \001(\0132\010.Payloa" + + "dB,\n(akka.persistence.query.internal.pro" + + "tobufH\001" + }; + descriptor = + akka.protobufv3.internal.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( + descriptorData, + new akka.protobufv3.internal.Descriptors.FileDescriptor[] { + akka.remote.ContainerFormats.getDescriptor(), + }); + internal_static_akka_persistence_query_EventEnvelope_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_akka_persistence_query_EventEnvelope_fieldAccessorTable = + new akka.protobufv3.internal.GeneratedMessageV3.FieldAccessorTable( + internal_static_akka_persistence_query_EventEnvelope_descriptor, + new java.lang.String[] { + "PersistenceId", + "EntityType", + "Slice", + "SequenceNr", + "Timestamp", + "Offset", + "OffsetManifest", + "Event", + "Metadata", + }); + akka.remote.ContainerFormats.getDescriptor(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/akka-persistence-query/src/main/protobuf/QueryMessages.proto b/akka-persistence-query/src/main/protobuf/QueryMessages.proto new file mode 100644 index 0000000000..685ed4318b --- /dev/null +++ b/akka-persistence-query/src/main/protobuf/QueryMessages.proto @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2014-2021 Lightbend Inc. + */ + +syntax = "proto2"; + +package akka.persistence.query; + +option java_package = "akka.persistence.query.internal.protobuf"; +option optimize_for = SPEED; +import "ContainerFormats.proto"; + +// for akka.persistence.query.typed.EventEnvelope +message EventEnvelope { + required string persistence_id = 1; + required string entity_type = 2; + required int32 slice = 3; + required int64 sequence_nr = 4; + required int64 timestamp = 5; + required string offset = 6; + required string offset_manifest = 7; + optional Payload event = 8; + optional Payload metadata = 9; +} diff --git a/akka-persistence-query/src/main/resources/reference.conf b/akka-persistence-query/src/main/resources/reference.conf index 9c566097d8..282361ca88 100644 --- a/akka-persistence-query/src/main/resources/reference.conf +++ b/akka-persistence-query/src/main/resources/reference.conf @@ -27,3 +27,16 @@ akka.persistence.query.journal.leveldb { max-buffer-size = 100 } #//#query-leveldb + +akka.actor { + serializers { + akka-persistence-query = "akka.persistence.query.internal.QuerySerializer" + } + serialization-bindings { + "akka.persistence.query.typed.EventEnvelope" = akka-persistence-query + "akka.persistence.query.Offset" = akka-persistence-query + } + serialization-identifiers { + "akka.persistence.query.internal.QuerySerializer" = 39 + } +} diff --git a/akka-persistence-query/src/main/scala/akka/persistence/query/internal/QuerySerializer.scala b/akka-persistence-query/src/main/scala/akka/persistence/query/internal/QuerySerializer.scala new file mode 100644 index 0000000000..d5185f2369 --- /dev/null +++ b/akka-persistence-query/src/main/scala/akka/persistence/query/internal/QuerySerializer.scala @@ -0,0 +1,222 @@ +/* + * Copyright (C) 2021 Lightbend Inc. + */ + +package akka.persistence.query.internal + +import java.io.NotSerializableException +import java.nio.charset.StandardCharsets.UTF_8 +import java.time.Instant +import java.util.Base64 +import java.util.UUID + +import scala.util.control.NonFatal + +import akka.annotation.InternalApi +import akka.persistence.query.NoOffset +import akka.persistence.query.Offset +import akka.persistence.query.Sequence +import akka.persistence.query.TimeBasedUUID +import akka.persistence.query.TimestampOffset +import akka.persistence.query.internal.protobuf.QueryMessages +import akka.persistence.query.typed.EventEnvelope +import akka.remote.serialization.WrappedPayloadSupport +import akka.serialization.BaseSerializer +import akka.serialization.SerializationExtension +import akka.serialization.SerializerWithStringManifest +import akka.serialization.Serializers + +/** + * INTERNAL API + * + * Serializer for [[EventEnvelope]] and [[Offset]]. + */ +@InternalApi private[akka] final class QuerySerializer(val system: akka.actor.ExtendedActorSystem) + extends SerializerWithStringManifest + with BaseSerializer { + + private val payloadSupport = new WrappedPayloadSupport(system) + private lazy val serialization = SerializationExtension(system) + + private final val EventEnvelopeManifest = "a" + + private final val SequenceOffsetManifest = "SEQ" + private final val TimeBasedUUIDOffsetManifest = "TBU" + private final val TimestampOffsetManifest = "TSO" + private final val NoOffsetManifest = "NO" + + private val manifestSeparator = ':' + // persistenceId and timestamp must not contain this separator char + private val timestampOffsetSeparator = ';' + + override def manifest(o: AnyRef): String = o match { + case _: EventEnvelope[_] => EventEnvelopeManifest + case offset: Offset => toStorageRepresentation(offset)._2 + case _ => + throw new IllegalArgumentException(s"Can't serialize object of type ${o.getClass} in [${getClass.getName}]") + } + + override def toBinary(o: AnyRef): Array[Byte] = o match { + case env: EventEnvelope[_] => + val builder = QueryMessages.EventEnvelope.newBuilder() + + val (offset, offsetManifest) = toStorageRepresentation(env.offset) + + builder + .setPersistenceId(env.persistenceId) + .setEntityType(env.entityType) + .setSlice(env.slice) + .setSequenceNr(env.sequenceNr) + .setTimestamp(env.timestamp) + .setOffset(offset) + .setOffsetManifest(offsetManifest) + + env.eventOption.foreach(event => builder.setEvent(payloadSupport.payloadBuilder(event))) + env.eventMetadata.foreach(meta => builder.setMetadata(payloadSupport.payloadBuilder(meta))) + + builder.build().toByteArray() + + case offset: Offset => + toStorageRepresentation(offset)._1.getBytes(UTF_8) + + case _ => + throw new IllegalArgumentException(s"Cannot serialize object of type [${o.getClass.getName}]") + } + + override def fromBinary(bytes: Array[Byte], manifest: String): AnyRef = manifest match { + case EventEnvelopeManifest => + val env = QueryMessages.EventEnvelope.parseFrom(bytes) + + val offset = fromStorageRepresentation(env.getOffset, env.getOffsetManifest) + + val eventOption = + if (env.hasEvent) Option(payloadSupport.deserializePayload(env.getEvent)) + else None + val metaOption = + if (env.hasMetadata) Option(payloadSupport.deserializePayload(env.getMetadata)) + else None + + new EventEnvelope( + offset, + env.getPersistenceId, + env.getSequenceNr, + eventOption, + env.getTimestamp, + metaOption, + env.getEntityType, + env.getSlice) + + case _ => + fromStorageRepresentation(new String(bytes, UTF_8), manifest) + } + + /** + * Deserialize an offset from a stored string representation and manifest. + * The offset is converted from its string representation to its real type. + */ + private def fromStorageRepresentation(offsetStr: String, manifest: String): Offset = { + manifest match { + case TimestampOffsetManifest => timestampOffsetFromStorageRepresentation(offsetStr) + case SequenceOffsetManifest => Offset.sequence(offsetStr.toLong) + case TimeBasedUUIDOffsetManifest => Offset.timeBasedUUID(UUID.fromString(offsetStr)) + case NoOffsetManifest => NoOffset + case _ => + manifest.split(manifestSeparator) match { + case Array(serializerIdStr, serializerManifest) => + val serializerId = serializerIdStr.toInt + val bytes = Base64.getDecoder.decode(offsetStr) + serialization.deserialize(bytes, serializerId, serializerManifest).get match { + case offset: Offset => offset + case other => + throw new NotSerializableException( + s"Unimplemented deserialization of offset with serializerId [$serializerId] and manifest [$manifest] " + + s"in [${getClass.getName}]. [${other.getClass.getName}] is not an Offset.") + } + case _ => + throw new NotSerializableException( + s"Unimplemented deserialization of offset with manifest [$manifest] " + + s"in [${getClass.getName}]. [$manifest] doesn't contain two parts.") + } + } + } + + /** + * Convert the offset to a tuple (String, String) where the first element is + * the String representation of the offset and the second element is its manifest. + */ + private def toStorageRepresentation(offset: Offset): (String, String) = { + offset match { + case t: TimestampOffset => (timestampOffsetToStorageRepresentation(t), TimestampOffsetManifest) + case seq: Sequence => (seq.value.toString, SequenceOffsetManifest) + case tbu: TimeBasedUUID => (tbu.value.toString, TimeBasedUUIDOffsetManifest) + case NoOffset => ("", NoOffsetManifest) + 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) + if (serializerManifest.contains(manifestSeparator)) + throw new IllegalArgumentException( + s"Serializer manifest [$serializerManifest] for " + + s"offset [${offset.getClass.getName}] must not contain [$manifestSeparator] character.") + (offsetStr, s"$serializerId$manifestSeparator$serializerManifest") + } + } + + private def timestampOffsetFromStorageRepresentation(str: String): TimestampOffset = { + try { + str.split(timestampOffsetSeparator) match { + case Array(timestamp, readTimestamp, pid, seqNr) => + // optimized for the normal case + TimestampOffset(Instant.parse(timestamp), Instant.parse(readTimestamp), Map(pid -> seqNr.toLong)) + case Array(timestamp) => + TimestampOffset(Instant.parse(timestamp), Map.empty) + case Array(timestamp, readTimestamp) => + TimestampOffset(Instant.parse(timestamp), Instant.parse(readTimestamp), Map.empty) + case parts => + val seen = parts.toList + .drop(2) + .grouped(2) + .map { + case pid :: seqNr :: Nil => pid -> seqNr.toLong + case _ => + throw new IllegalArgumentException( + s"Invalid representation of Map(pid -> seqNr) [${parts.toList.drop(1).mkString(",")}]") + } + .toMap + TimestampOffset(Instant.parse(parts(0)), Instant.parse(parts(1)), seen) + } + } catch { + case NonFatal(e) => + throw new IllegalArgumentException(s"Unexpected serialized TimestampOffset format [$str].", e) + } + } + + private def timestampOffsetToStorageRepresentation(offset: TimestampOffset): String = { + def checkSeparator(pid: String): Unit = + if (pid.contains(timestampOffsetSeparator)) + throw new IllegalArgumentException( + s"persistenceId [$pid] in offset [$offset] " + + s"must not contain [$timestampOffsetSeparator] character") + + val str = new java.lang.StringBuilder + str.append(offset.timestamp).append(timestampOffsetSeparator).append(offset.readTimestamp) + if (offset.seen.size == 1) { + // optimized for the normal case + val pid = offset.seen.head._1 + checkSeparator(pid) + val seqNr = offset.seen.head._2 + str.append(timestampOffsetSeparator).append(pid).append(timestampOffsetSeparator).append(seqNr) + } else if (offset.seen.nonEmpty) { + offset.seen.toList.sortBy(_._1).foreach { + case (pid, seqNr) => + checkSeparator(pid) + str.append(timestampOffsetSeparator).append(pid).append(timestampOffsetSeparator).append(seqNr) + } + } + str.toString + } + +} diff --git a/akka-persistence-query/src/main/scala/akka/persistence/query/typed/EventEnvelope.scala b/akka-persistence-query/src/main/scala/akka/persistence/query/typed/EventEnvelope.scala index 16478ca9b5..bbec33766c 100644 --- a/akka-persistence-query/src/main/scala/akka/persistence/query/typed/EventEnvelope.scala +++ b/akka-persistence-query/src/main/scala/akka/persistence/query/typed/EventEnvelope.scala @@ -112,5 +112,5 @@ final class EventEnvelope[Event]( } override def toString: String = - s"EventBySliceEnvelope($offset,$persistenceId,$sequenceNr,$eventOption,$timestamp,$eventMetadata,$entityType,$slice)" + s"EventEnvelope($offset,$persistenceId,$sequenceNr,$eventOption,$timestamp,$eventMetadata,$entityType,$slice)" } diff --git a/akka-persistence-query/src/test/scala/akka/persistence/query/internal/QuerySerializerSpec.scala b/akka-persistence-query/src/test/scala/akka/persistence/query/internal/QuerySerializerSpec.scala new file mode 100644 index 0000000000..a7ccc10175 --- /dev/null +++ b/akka-persistence-query/src/test/scala/akka/persistence/query/internal/QuerySerializerSpec.scala @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2020-2021 Lightbend Inc. + */ + +package akka.persistence.query.internal + +import java.time.Instant +import java.util.UUID + +import akka.persistence.query.NoOffset +import akka.persistence.query.Sequence +import akka.persistence.query.TimeBasedUUID +import akka.persistence.query.TimestampOffset +import akka.persistence.query.typed.EventEnvelope +import akka.serialization.SerializationExtension +import akka.serialization.SerializerWithStringManifest +import akka.testkit.AkkaSpec + +class QuerySerializerSpec extends AkkaSpec { + + private val serialization = SerializationExtension(system) + + def verifySerialization(obj: AnyRef): Unit = { + val serializer = serialization.findSerializerFor(obj).asInstanceOf[SerializerWithStringManifest] + val manifest = serializer.manifest(obj) + val bytes = serialization.serialize(obj).get + val deserialzied = serialization.deserialize(bytes, serializer.identifier, manifest).get + deserialzied shouldBe obj + } + + "Query serializer" should { + "serialize EventEnvelope with Sequence Offset" in { + verifySerialization( + EventEnvelope(Sequence(1L), "TestEntity|id1", 3L, "event1", System.currentTimeMillis(), "TestEntity", 5)) + } + + "serialize EventEnvelope with Meta" in { + verifySerialization( + new EventEnvelope( + Sequence(1L), + "TestEntity|id1", + 3L, + Some("event1"), + System.currentTimeMillis(), + Some("some-meta"), + "TestEntity", + 5)) + } + + "serialize EventEnvelope with Timestamp Offset" in { + verifySerialization( + EventEnvelope( + TimestampOffset(Instant.now(), Instant.now(), Map("pid1" -> 3)), + "TestEntity|id1", + 3L, + "event1", + System.currentTimeMillis(), + "TestEntity", + 5)) + } + + "serialize EventEnvelope with TimeBasedUUID Offset" in { + //2019-12-16T15:32:36.148Z[UTC] + val uuidString = "49225740-2019-11ea-a752-ffae2393b6e4" + val timeUuidOffset = TimeBasedUUID(UUID.fromString(uuidString)) + verifySerialization( + EventEnvelope(timeUuidOffset, "TestEntity|id1", 3L, "event1", System.currentTimeMillis(), "TestEntity", 5)) + } + + "serialize Sequence Offset" in { + verifySerialization(Sequence(0)) + } + + "serialize Timestamp Offset" in { + verifySerialization(TimestampOffset(Instant.now(), Instant.now(), Map("pid1" -> 3))) + verifySerialization(TimestampOffset(Instant.now(), Instant.now(), Map("pid1" -> 3, "pid2" -> 4))) + verifySerialization(TimestampOffset(Instant.now(), Instant.now(), Map.empty)) + verifySerialization(TimestampOffset(Instant.now(), Map.empty)) + } + + "serialize TimeBasedUUID Offset" in { + //2019-12-16T15:32:36.148Z[UTC] + val uuidString = "49225740-2019-11ea-a752-ffae2393b6e4" + val timeUuidOffset = TimeBasedUUID(UUID.fromString(uuidString)) + verifySerialization(timeUuidOffset) + } + + "serialize NoOffset" in { + verifySerialization(NoOffset) + } + } + +} diff --git a/build.sbt b/build.sbt index 5fbfea1890..85e6caa627 100644 --- a/build.sbt +++ b/build.sbt @@ -291,10 +291,18 @@ lazy val persistence = akkaModule("akka-persistence") .settings(crossScalaVersions -= akka.Dependencies.scala3Version) lazy val persistenceQuery = akkaModule("akka-persistence-query") - .dependsOn(stream, persistence % "compile->compile;test->test", streamTestkit % "test") + .dependsOn( + stream, + persistence % "compile->compile;test->test", + remote % "provided", + protobufV3 % "provided", + streamTestkit % "test") .settings(Dependencies.persistenceQuery) .settings(AutomaticModuleName.settings("akka.persistence.query")) .settings(OSGi.persistenceQuery) + .settings(Protobuf.settings) + // To be able to import ContainerFormats.proto + .settings(Protobuf.importPath := Some(baseDirectory.value / ".." / "akka-remote" / "src" / "main" / "protobuf")) .settings(Test / fork := true) .enablePlugins(ScaladocNoVerificationOfDiagrams) diff --git a/project/AkkaDisciplinePlugin.scala b/project/AkkaDisciplinePlugin.scala index 8ea90a19db..1ae9fd3e53 100644 --- a/project/AkkaDisciplinePlugin.scala +++ b/project/AkkaDisciplinePlugin.scala @@ -36,6 +36,8 @@ object AkkaDisciplinePlugin extends AutoPlugin { "akka-cluster-sharding-typed", // references to deprecated PARSER fields in generated message formats? "akka-persistence-typed", + // references to deprecated PARSER fields in generated message formats? + "akka-persistence-query", "akka-docs") val looseProjects = Set(