Class: Temporalio::Converters::DataConverter

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

Overview

Data converter for converting/encoding payloads to/from Ruby values.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(payload_converter: PayloadConverter.default, failure_converter: FailureConverter.default, payload_codec: nil) ⇒ DataConverter

Create data converter.

Parameters:

  • payload_converter (PayloadConverter) (defaults to: PayloadConverter.default)

    Payload converter to use.

  • failure_converter (FailureConverter) (defaults to: FailureConverter.default)

    Failure converter to use.

  • payload_codec (PayloadCodec, nil) (defaults to: nil)

    Payload codec to use.



30
31
32
33
34
35
36
37
38
# File 'lib/temporalio/converters/data_converter.rb', line 30

def initialize(
  payload_converter: PayloadConverter.default,
  failure_converter: FailureConverter.default,
  payload_codec: nil
)
  @payload_converter = payload_converter
  @failure_converter = failure_converter
  @payload_codec = payload_codec
end

Instance Attribute Details

#failure_converterFailureConverter (readonly)

Returns Failure converter.

Returns:



15
16
17
# File 'lib/temporalio/converters/data_converter.rb', line 15

def failure_converter
  @failure_converter
end

#payload_codecPayloadCodec? (readonly)

Returns Optional codec for encoding/decoding payload bytes such as for encryption.

Returns:

  • (PayloadCodec, nil)

    Optional codec for encoding/decoding payload bytes such as for encryption.



18
19
20
# File 'lib/temporalio/converters/data_converter.rb', line 18

def payload_codec
  @payload_codec
end

#payload_converterPayloadConverter (readonly)

Returns Payload converter.

Returns:



12
13
14
# File 'lib/temporalio/converters/data_converter.rb', line 12

def payload_converter
  @payload_converter
end

Class Method Details

.defaultDataConverter

Returns Default data converter.

Returns:



21
22
23
# File 'lib/temporalio/converters/data_converter.rb', line 21

def self.default
  @default ||= DataConverter.new
end

Instance Method Details

#from_failure(failure) ⇒ Exception

Decode and convert a Temporal failure to a Ruby error.

Parameters:

Returns:

  • (Exception)

    Decoded and converted Ruby error.



104
105
106
# File 'lib/temporalio/converters/data_converter.rb', line 104

def from_failure(failure)
  failure_converter.from_failure(failure, self)
end

#from_payload(payload, hint: nil) ⇒ Object

Decode and convert a payload to a Ruby value.

Parameters:

  • payload (Api::Common::V1::Payload)

    Encoded payload.

  • hint (Object, nil) (defaults to: nil)

    Hint, if any, to assist conversion.

Returns:

  • (Object)

    Decoded and converted Ruby value.



70
71
72
73
# File 'lib/temporalio/converters/data_converter.rb', line 70

def from_payload(payload, hint: nil)
  payload = payload_codec.decode([payload]).first if payload_codec
  payload_converter.from_payload(payload, hint:)
end

#from_payloads(payloads, hints: nil) ⇒ Array<Object>

Decode and convert a payload set to Ruby values.

Parameters:

  • payloads (Api::Common::V1::Payloads, nil)

    Encoded payload set.

  • hints (Array<Object>, nil) (defaults to: nil)

    Hints, if any, to assist conversion. Note, when using the default converter that converts a value at a time, hints for each payload are taken from the array at that payload’s index. So if there are fewer hints than payloads, some payloads will not have a hint. Similarly if there are more hints than payloads, the trailing hints are not used.

Returns:

  • (Array<Object>)

    Decoded and converted Ruby values.



83
84
85
86
87
88
89
90
# File 'lib/temporalio/converters/data_converter.rb', line 83

def from_payloads(payloads, hints: nil)
  return [] unless payloads && !payloads.payloads.empty?

  if payload_codec && !payloads.payloads.empty?
    payloads = Api::Common::V1::Payloads.new(payloads: payload_codec.decode(payloads.payloads))
  end
  payload_converter.from_payloads(payloads, hints:)
end

#to_failure(error) ⇒ Api::Failure::V1::Failure

Convert a Ruby error to a Temporal failure and encode it.

Parameters:

  • error (Exception)

    Ruby error.

Returns:



96
97
98
# File 'lib/temporalio/converters/data_converter.rb', line 96

def to_failure(error)
  failure_converter.to_failure(error, self)
end

#to_payload(value, hint: nil) ⇒ Api::Common::V1::Payload

Convert a Ruby value to a payload and encode it.

Parameters:

  • value (Object)

    Ruby value.

  • hint (Object, nil) (defaults to: nil)

    Hint, if any, to assist conversion.

Returns:



45
46
47
48
49
# File 'lib/temporalio/converters/data_converter.rb', line 45

def to_payload(value, hint: nil)
  payload = payload_converter.to_payload(value, hint:)
  payload = payload_codec.encode([payload]).first if payload_codec
  payload
end

#to_payloads(values, hints: nil) ⇒ Api::Common::V1::Payloads

Convert multiple Ruby values to a payload set and encode it.

Parameters:

  • values (Object)

    Ruby values, converted to array via Array.

  • hints (Array<Object>, nil) (defaults to: nil)

    Hints, if any, to assist conversion. Note, when using the default converter that converts a payload at a time, hints for each value are taken from the array at that value’s index. So if there are fewer hints than values, some values will not have a hint. Similarly if there are more hints than values, the trailing hints are not used.

Returns:



59
60
61
62
63
# File 'lib/temporalio/converters/data_converter.rb', line 59

def to_payloads(values, hints: nil)
  payloads = payload_converter.to_payloads(values, hints:)
  payloads.payloads.replace(payload_codec.encode(payloads.payloads)) if payload_codec && !payloads.payloads.empty?
  payloads
end