Module: Julewire::Core::Serialization::SerializerPool

Defined in:
lib/julewire/core/serialization/serializer_pool.rb

Class Method Summary collapse

Class Method Details

.serialize(pool_key, serializer_key, payload) ⇒ Object



18
19
20
# File 'lib/julewire/core/serialization/serializer_pool.rb', line 18

def serialize(pool_key, serializer_key, payload, &)
  serialize_with(serializer(pool_key, serializer_key, &), payload, &)
end

.serialize_with(serializer, payload) ⇒ Object



22
23
24
25
# File 'lib/julewire/core/serialization/serializer_pool.rb', line 22

def serialize_with(serializer, payload)
  serializer = yield if serializer.in_use?
  serializer.serialize(payload)
end

.serializer(pool_key, serializer_key) ⇒ Object



8
9
10
11
12
13
14
15
16
# File 'lib/julewire/core/serialization/serializer_pool.rb', line 8

def serializer(pool_key, serializer_key)
  # Serializers carry traversal state, so pooled instances stay thread-local.
  pool = Thread.current.thread_variable_get(pool_key)
  unless pool
    pool = {}
    Thread.current.thread_variable_set(pool_key, pool)
  end
  pool[serializer_key] ||= yield
end