class Synapse::Serialization::SerializedMessage
Serialized representation of a message
Attributes
@return [String]
@return [LazyObject]
@return [LazyObject]
@return [Time]
Public Class Methods
Yields a message builder that can be used to produce a message
@see SerializedMessageBuilder#build
@yield [SerializedMessageBuilder] @return [SerializedMessage]
# File lib/synapse/serialization/message/serialized_message.rb, line 99 def self.build(&block) builder.build(&block) end
Returns the type of builder that can be used to build this type of message @return [Class]
# File lib/synapse/serialization/message/serialized_message.rb, line 90 def self.builder SerializedMessageBuilder end
@param [String] id @param [LazyObject] metadata @param [LazyObject] payload @param [Time] timestamp @return [undefined]
# File lib/synapse/serialization/message/serialized_message.rb, line 24 def initialize(id, metadata, payload, timestamp) @id = id @serialized_metadata = metadata @serialized_payload = payload @timestamp = timestamp end
Public Instance Methods
Returns a copy of this message with the given metadata merged in
@see Message#and_metadata
@param [Hash] additional_metadata @return [SerializedMessage]
# File lib/synapse/serialization/message/serialized_message.rb, line 51 def and_metadata(additional_metadata) return self if additional_metadata.empty? self.class.build do |builder| build_duplicate builder, metadata.merge(additional_metadata) end end
@return [Hash] The deserialized metadata for this message
# File lib/synapse/serialization/message/serialized_message.rb, line 32 def metadata @serialized_metadata.deserialized end
@return [Object] The deserialized payload for this message
# File lib/synapse/serialization/message/serialized_message.rb, line 37 def payload @serialized_payload.deserialized end
@return [Class] The type of payload for this message
# File lib/synapse/serialization/message/serialized_message.rb, line 42 def payload_type @serialized_payload.type end
@see SerializationAware#serialize_metadata
@param [Serializer] serializer @param [Class] expected_type @return [SerializedObject]
# File lib/synapse/serialization/message/serialized_message.rb, line 76 def serialize_metadata(serializer, expected_type) serialize @serialized_metadata, serializer, expected_type end
@see SerializationAware#serialize_payload
@param [Serializer] serializer @param [Class] expected_type @return [SerializedObject]
# File lib/synapse/serialization/message/serialized_message.rb, line 84 def serialize_payload(serializer, expected_type) serialize @serialized_payload, serializer, expected_type end
Returns a copy of this message with the metadata replaced with the given metadata
@see Message#with_metadata
@param [Hash] replacement_metadata @return [SerializedMessage]
# File lib/synapse/serialization/message/serialized_message.rb, line 64 def with_metadata(replacement_metadata) return self if @serialized_metadata.deserialized == replacement_metadata self.class.build do |builder| build_duplicate builder, replacement_metadata end end
Protected Instance Methods
Populates a duplicated message with attributes from this message
@param [SerializedMessageBuilder] builder @param [Hash] metadata @return [undefined]
# File lib/synapse/serialization/message/serialized_message.rb, line 110 def build_duplicate(builder, metadata) builder.id = @id builder.metadata = DeserializedObject.new metadata builder.payload = @serialized_payload builder.timestamp = @timestamp end
Private Instance Methods
@param [LazyObject] object @param [Serializer] serializer @param [Class] expected_type @return [SerializedObject]
# File lib/synapse/serialization/message/serialized_message.rb, line 123 def serialize(object, serializer, expected_type) if object.serializer.equal? serializer serialized = object.serialized_object serializer.converter_factory.convert serialized, expected_type else serializer.serialize object.deserialized, expected_type end end