class Synapse::Serialization::SerializedObjectCache

Thread-safe cache for messages to store serialized metadata and payload @api private

Public Class Methods

new(message) click to toggle source

@param [Message] message @return [undefined]

# File lib/synapse/serialization/message/serialized_object_cache.rb, line 8
def initialize(message)
  @message = message
  @lock = Mutex.new
  @metadata_cache = Hash.new
  @payload_cache = Hash.new
end

Public Instance Methods

serialize_metadata(serializer, expected_type) click to toggle source

@param [Serializer] serializer @param [Class] expected_type @return [SerializedObject]

# File lib/synapse/serialization/message/serialized_object_cache.rb, line 18
def serialize_metadata(serializer, expected_type)
  serialize @message.metadata, @metadata_cache, serializer, expected_type
end
serialize_payload(serializer, expected_type) click to toggle source

@param [Serializer] serializer @param [Class] expected_type @return [SerializedObject]

# File lib/synapse/serialization/message/serialized_object_cache.rb, line 25
def serialize_payload(serializer, expected_type)
  serialize @message.payload, @payload_cache, serializer, expected_type
end

Private Instance Methods

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

@param [Object] object @param [Hash<Serializer, SerializedObject>] cache @param [Serializer] serializer @param [Class] expected_type @return [SerializedObject]

# File lib/synapse/serialization/message/serialized_object_cache.rb, line 36
def serialize(object, cache, serializer, expected_type)
  @lock.synchronize do
    serialized = cache[serializer]
    if serialized
      serializer.converter_factory.convert serialized, expected_type
    else
      serialized = serializer.serialize object, expected_type
      cache[serializer] = serialized
      serialized
    end
  end
end