Class: Temporal::DataConverter

Inherits:
Object
  • Object
show all
Defined in:
lib/temporal/data_converter.rb

Defined Under Namespace

Classes: MissingPayload

Instance Method Summary collapse

Constructor Details

#initialize(payload_converter:, payload_codecs:, failure_converter:) ⇒ DataConverter

Returns a new instance of DataConverter.



8
9
10
11
12
# File 'lib/temporal/data_converter.rb', line 8

def initialize(payload_converter:, payload_codecs:, failure_converter:)
  @payload_converter = payload_converter
  @payload_codecs = payload_codecs
  @failure_converter = failure_converter
end

Instance Method Details

#from_failure(failure) ⇒ Object

Raises:

  • (ArgumentError)


57
58
59
60
61
62
# File 'lib/temporal/data_converter.rb', line 57

def from_failure(failure)
  raise ArgumentError, 'missing a failure to convert from' unless failure

  failure = decode_failure(failure)
  failure_converter.from_failure(failure, payload_converter)
end

#from_payload_map(payload_map) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/temporal/data_converter.rb', line 43

def from_payload_map(payload_map)
  return unless payload_map

  # Protobuf's Hash isn't compatible with the native Hash, ignore rubocop here
  # rubocop:disable Style/MapToHash
  payload_map.map do |key, payload|
    decoded_payload = decode([payload]).first
    raise MissingPayload, 'Payload Codecs returned no payloads' unless decoded_payload

    [key, from_payload(decoded_payload)]
  end.to_h
  # rubocop:enable Style/MapToHash
end

#from_payloads(payloads) ⇒ Object



36
37
38
39
40
41
# File 'lib/temporal/data_converter.rb', line 36

def from_payloads(payloads)
  return unless payloads

  decode(payloads.payloads)
    .map { |payload| from_payload(payload) }
end

#to_failure(error) ⇒ Object



31
32
33
34
# File 'lib/temporal/data_converter.rb', line 31

def to_failure(error)
  failure = failure_converter.to_failure(error, payload_converter)
  encode_failure(failure)
end

#to_payload_map(data) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/temporal/data_converter.rb', line 21

def to_payload_map(data)
  data.to_h do |key, value|
    payload = to_payload(value)
    encoded_payload = encode([payload]).first
    raise MissingPayload, 'Payload Codecs returned no payloads' unless encoded_payload

    [key.to_s, encoded_payload]
  end
end

#to_payloads(data) ⇒ Object



14
15
16
17
18
19
# File 'lib/temporal/data_converter.rb', line 14

def to_payloads(data)
  return if data.nil? || Array(data).empty?

  payloads = Array(data).map { |value| to_payload(value) }
  Temporal::Api::Common::V1::Payloads.new(payloads: encode(payloads))
end