Class: Temporalio::PayloadConverter::Composite

Inherits:
Base
  • Object
show all
Defined in:
lib/temporalio/payload_converter/composite.rb

Overview

A payload converter for combining multiple payload converters together.

Defined Under Namespace

Classes: ConverterNotFound, EncodingNotSet

Instance Method Summary collapse

Constructor Details

#initialize(*converters) ⇒ Composite

Returns a new instance of Composite.

Parameters:



12
13
14
15
16
17
18
19
# File 'lib/temporalio/payload_converter/composite.rb', line 12

def initialize(*converters)
  super()

  @converters = converters.each_with_object({}) do |converter, result|
    result[converter.encoding] = converter
    result
  end
end

Instance Method Details

#from_payload(payload) ⇒ Object

Raises:



31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/temporalio/payload_converter/composite.rb', line 31

def from_payload(payload)
  encoding = payload.['encoding']
  raise EncodingNotSet, 'Missing payload encoding' unless encoding

  converter = converters[encoding]
  unless converter
    available = converters.keys.join(', ')
    raise ConverterNotFound, "Missing converter for encoding '#{encoding}' (available: #{available})"
  end

  converter.from_payload(payload)
end

#to_payload(data) ⇒ Object

Raises:



21
22
23
24
25
26
27
28
29
# File 'lib/temporalio/payload_converter/composite.rb', line 21

def to_payload(data)
  converters.each_value do |converter|
    payload = converter.to_payload(data)
    return payload unless payload.nil?
  end

  available = converters.values.map(&:class).join(', ')
  raise ConverterNotFound, "Available converters (#{available}) could not convert data"
end