Class: Temporalio::DataConverter

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

Defined Under Namespace

Classes: MissingPayload

Instance Method Summary collapse

Constructor Details

#initialize(payload_converter: Temporalio::PayloadConverter::DEFAULT, payload_codecs: [], failure_converter: Temporalio::FailureConverter::DEFAULT) ⇒ DataConverter

Initialize a new data converter with optional payload converter, codecs and failure converter.

Parameters:

See Also:



23
24
25
26
27
28
29
30
31
# File 'lib/temporalio/data_converter.rb', line 23

def initialize(
  payload_converter: Temporalio::PayloadConverter::DEFAULT,
  payload_codecs: [],
  failure_converter: Temporalio::FailureConverter::DEFAULT
)
  @payload_converter = payload_converter
  @payload_codecs = payload_codecs
  @failure_converter = failure_converter
end

Instance Method Details

#from_failure(failure) ⇒ Object

Raises:

  • (ArgumentError)


98
99
100
101
102
103
# File 'lib/temporalio/data_converter.rb', line 98

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(payload) ⇒ Object

Raises:



66
67
68
69
70
71
# File 'lib/temporalio/data_converter.rb', line 66

def from_payload(payload)
  decoded_payload = decode([payload]).first
  raise MissingPayload, 'Payload Codecs returned no payloads' unless decoded_payload

  payload_to_value(decoded_payload)
end

#from_payload_array(payloads) ⇒ Object



73
74
75
76
77
78
# File 'lib/temporalio/data_converter.rb', line 73

def from_payload_array(payloads)
  return [] if payloads.empty?

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

#from_payload_map(payload_map) ⇒ Object



87
88
89
90
91
92
93
94
95
96
# File 'lib/temporalio/data_converter.rb', line 87

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, Style/HashTransformValues
  payload_map.map do |key, payload|
    [key, from_payload(payload)]
  end.to_h
  # rubocop:enable Style/MapToHash, Style/HashTransformValues
end

#from_payloads(payloads) ⇒ Object



80
81
82
83
84
85
# File 'lib/temporalio/data_converter.rb', line 80

def from_payloads(payloads)
  return unless payloads

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

#to_failure(error) ⇒ Object



61
62
63
64
# File 'lib/temporalio/data_converter.rb', line 61

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

#to_payload(value) ⇒ Object

Raises:



33
34
35
36
37
38
39
# File 'lib/temporalio/data_converter.rb', line 33

def to_payload(value)
  payload = value_to_payload(value)
  encoded_payload = encode([payload]).first
  raise MissingPayload, 'Payload Codecs returned no payloads' unless encoded_payload

  encoded_payload
end

#to_payload_array(data) ⇒ Object



41
42
43
44
45
46
# File 'lib/temporalio/data_converter.rb', line 41

def to_payload_array(data)
  return [] if data.nil? || Array(data).empty?

  payloads = Array(data).map { |value| value_to_payload(value) }
  encode(payloads)
end

#to_payload_map(data) ⇒ Object



55
56
57
58
59
# File 'lib/temporalio/data_converter.rb', line 55

def to_payload_map(data)
  data.to_h do |key, value|
    [key.to_s, to_payload(value)]
  end
end

#to_payloads(data) ⇒ Object



48
49
50
51
52
53
# File 'lib/temporalio/data_converter.rb', line 48

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

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