class Synapse::Serialization::SerializedMessage

Serialized representation of a message

Attributes

id[R]

@return [String]

serialized_metadata[R]

@return [LazyObject]

serialized_payload[R]

@return [LazyObject]

timestamp[R]

@return [Time]

Public Class Methods

build(&block) click to toggle source

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
builder() click to toggle source

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
new(id, metadata, payload, timestamp) click to toggle source

@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

and_metadata(additional_metadata) click to toggle source

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
metadata() click to toggle source

@return [Hash] The deserialized metadata for this message

# File lib/synapse/serialization/message/serialized_message.rb, line 32
def metadata
  @serialized_metadata.deserialized
end
payload() click to toggle source

@return [Object] The deserialized payload for this message

# File lib/synapse/serialization/message/serialized_message.rb, line 37
def payload
  @serialized_payload.deserialized
end
payload_type() click to toggle source

@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
serialize_metadata(serializer, expected_type) click to toggle source

@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
serialize_payload(serializer, expected_type) click to toggle source

@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
with_metadata(replacement_metadata) click to toggle source

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

build_duplicate(builder, metadata) click to toggle source

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

serialize(object, serializer, expected_type) click to toggle source

@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